1、前言
题目描述2、思路
这道题的考察点我觉得不在于方法上,而在于智力上。首先,我们知道某个位置上 nums[i] 的乘积为:nums[0] * nums[1] * ... * nums[i - 1] * 1 * nums[i + 1] * ... * nums[n - 1]。我们数组中每个位置的上的乘积画出来:
图
由此看出,我们只要将乘积分为上三角、下三角,分别两次遍历即可。
3、代码
public class Q238_ProductExceptSelf {
public int[] productExceptSelf(int[] nums) {
if(nums == null || nums.length == 0){
return new int[]{};
}
int p = 1, q = 1;
int[] res = new int[nums.length];
// 上三角的遍历
for (int i = 0; i < nums.length; i++) {
res[i] = p;
p = p * nums[i];
}
for(int i = nums.length - 1; i >= 0; i--){
res[i] = res[i] * q;
q = q * nums[i];
}
return res;
}
public static void main(String[] args) {
int[] nums = {1,2,3,4};
int[] res = new Q238_ProductExceptSelf().productExceptSelf(nums);
for (int re : res) {
System.out.println(re);
}
}
}
网友评论