除自身以外数组的乘积
目录
一:题目链接
二:题目思路
三:代码实现
一:题目链接
二:题目思路
题目的思路与我们上一节讲的 “寻找数组的中心下标” 是一样的,只不过,有一些细节问题的处理。
思路就是定义和初始化 “前缀积” 数组 和 “后缀积” 数组,这些数组的元素是等于 前面(后面)几个 元素的乘积 ,不包括当前位置的元素乘积,也就是:
//前缀积first_dp[i] = first_dp[i -1] * nums[i -1];//后缀积end_dp[i] = end_dp[i + 1] * nums[i + 1];
细节问题就是,未初始化前, first_dp[ 0 ] 和 end_dp[ n - 1 ] 的值是 0,如果直接初始化,后续一直为 0,是错误的,这里我们可以先 令这两个位置的元素为 1 ,从此,后续的初始化就不会出现问题了。
三:代码实现
int n = nums.length;int[] answer = new int[n];int[] first_dp = new int[n];int[] end_dp = new int[n];//处理细节问题first_dp[0] = 1;end_dp[n -1] = 1;//初始化前缀积,后缀积数组for(int i = 1;i < n;i++) {first_dp[i] = first_dp[i -1] * nums[i -1];}for(int i = n - 2;i >= 0;i--) {end_dp[i] = end_dp[i + 1] * nums[i + 1];}//使用for(int i = 0;i < n;i++) {answer[i] = first_dp[i] * end_dp[i];}return answer;