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.)
题目大意分析:就是从一个数组得到另外一个数组,转换规则是,除这个元素外的所有元素乘积,就是新数组本位置的值
class Solution {
public int[] productExceptSelf(int[] nums) {
int maxCount=1;
int zeroCount=0;//统计数组中有几个0
for(int i=0;i<nums.length;i++){
if(nums[i]==0){
zeroCount++;
continue;
}
maxCount*=nums[i];//算出除了0元素之外的元素乘积
}
for(int i=0;i<nums.length;i++){
if(zeroCount==1){//如果只有一个0元素,那么结果数组中只有该位置数不为0
if(nums[i]==0){
nums[i]=maxCount;
for(int j=0;j<nums.length;j++){
if(j==i) {
continue;
}
nums[j]=0;
}
break;如果这里不跳出的话,会导致上面的for循环重置的0会在外层for循环产生作用
}
}else if(zeroCount>=2){//如果有两个0元素,那么结果集元素都为0
for(int j=0;j<nums.length;j++){
nums[j]=0;
}
}else{//一个0元素都没有,那么用所有元素乘积的值除以该位置的元素
nums[i]=maxCount/nums[i];
}
}
return nums;
}
}