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 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.)
题目:给定n个整数的数组,其中n> 1,nums返回一个数组输出,使得输出[i]等于除nums [i]之外的所有num的元素的乘积。
要求:恒定的空间复杂性 (注意:对于空间复杂度分析而言,输出数组并不算作额外空间)。
思路:第一遍遍历,首先计算全部乘积;第二遍遍历,用第一步得到的乘积除去当前nums[i]。
注意点:要考虑数组中是否有为0 的值,并且考虑是否一个或者多个。
代码:
class Solution {
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
int[] ret = new int[len];
int n = 1;
int flag0 = 0;
for (int i : nums) {
if (i != 0)
n *= i;
else
flag0++;
if (flag0 > 1) {
n = 0;
return ret;
}
}
if (flag0 == 1) {
for (int i = 0; i < len; i++) {
if (nums[i] != 0)
ret[i] = 0;
else
ret[i] = n;
}
}
if (flag0 == 0) {
for (int i = 0; i < len; i++) {
ret[i] = n / nums[i];
}
}
return ret;
}
}
注:第一次提交没有将nums.length存放起来,在每次遍历过程中,每循环一次都调用了一遍,只打败29%多解答。
修改后:于是查了一下length,结果了解了length和length()的不同...看来得看看源码了
打败100%的solution是真的秀!!!