资讯专栏INFORMATION COLUMN

LeetCode 238 Product of Array Except Self

henry14 / 680人阅读

Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].
Solve it without division and in O(n).

For example, given [1,2,3,4], return [24,12,8,6].

Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)

有三种情况:
数组元素不含0,像[1,2,3,4], return [24,12,8,6]
数组元素有1个0,[1,0,3,4], return [0,12,0,0],是0的那个位置是其他元素的乘积
数组元素有2个或者2个以上0,[1,0,0,4]则返回[0,0,0,0],返回全部是0.

</>复制代码

  1. public class ProductArrayExceptSelf {
  2. public int[] solution(int[] nums) {
  3. int zeroCount = 0;
  4. for (int n : nums)
  5. if (n == 0)
  6. zeroCount++;
  7. // 有两个或者两个以上的元素是0,那么数组设为全零返回
  8. if (zeroCount > 1) {
  9. for (int i = 0; i < nums.length; i++)
  10. nums[i] = 0;
  11. } else if (zeroCount == 0) {
  12. // 如果没有0,则计算所有的乘积
  13. int product = 1;
  14. for (int n : nums)
  15. product *= n;
  16. // 每个数组元素置为product / 该位置值即可
  17. for (int i = 0; i < nums.length; i++)
  18. nums[i] = product / nums[i];
  19. } else {
  20. // 如果元素中有1个0
  21. int product = 1;
  22. // 跳过那个元素,计算所有的乘积
  23. for (int n : nums)
  24. if (n != 0)
  25. product *= n;
  26. // 元素为0的位置置为product,其他置为0
  27. for (int i = 0; i < nums.length; i++)
  28. if (nums[i] == 0)
  29. nums[i] = product;
  30. else
  31. nums[i] = 0;
  32. }
  33. return nums;
  34. }
  35. public static void main(String[] args) {
  36. System.out.println(Arrays.toString(new ProductArrayExceptSelf().solution(new int[] { 1, 0, 3, 0 })));
  37. }
  38. }

补上one pass 且不用除法, o(n)解法。
使用左右指针,一遍遍历即可

</>复制代码

  1. public int[] solution2(int[] nums) {
  2. int[] result = new int[nums.length];
  3. Arrays.fill(result, 1);
  4. int left = 1, right = 1;
  5. int len = nums.length;
  6. for (int i = 0; i < len; i++) {
  7. result[i] *= left;
  8. result[len - 1 - i] *= right;
  9. left *= nums[i];
  10. right *= nums[len - i - 1];
  11. //System.out.println(Arrays.toString(result));
  12. }
  13. return result;
  14. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66760.html

相关文章

  • 【Python】LeetCode 238. Product of Array Except Self

    摘要:题目描述题目解析简单来说就是对于数组中每一项,求其他项之积。算一遍全部元素的积再分别除以每一项要仔细考虑元素为零的情况。没有零直接除下去。一个零零的位置对应值为其他元素之积,其他位置为零。两个以上的零全部都是零。 题目描述 Given an array of n integers where n > 1, nums, return an array output such that o...

    kaka 评论0 收藏0
  • [LeetCode] 238. Product of Array Except Self

    Problem Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i]. Solve it without division and in ...

    Loong_T 评论0 收藏0
  • 238. Product of Array Except Self

    问题:Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i]. Solve it without division and in O(n)....

    刘永祥 评论0 收藏0
  • [LeetCode] Product of Array Except Self

    Problem Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i]. Solve it without division and in ...

    golden_hamster 评论0 收藏0
  • [Leetcode] Product of Array Except Self 自身以外的数组乘积

    摘要:动态规划复杂度时间空间思路分析出自身以外数组乘积的性质,它实际上是自己左边左右数的乘积,乘上自己右边所有数的乘积。所以我们可以用一个数组来表示第个数字前面数的乘积,这样。同理,我们可以反向遍历一遍生成另一个数组。 Product of Array Except Self Given an array of n integers where n > 1, nums, return an...

    rockswang 评论0 收藏0

发表评论

0条评论

henry14

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<