238. 除自身以外数组的乘积
1、定义一个与nums长度相等的数组 // nums = [1 2 3 4]
2、定义前缀积初始值prefix = 1;后缀积初始值postfix = 1;
3、计算前缀积
nums = [1 2 3 4]
- ans[0] = prefix // ans = [1◻◻◻];prefix = nums[0] * prefix = 1 * 1 = 1
- ans[1] = prefix // ans = [1 1◻◻];prefix = nums[1] * prefix = 2 * 1 = 2
- ans[2] = prefix // ans = [1 1 2◻];prefix = nums[2] * prefix = 3 * 2 = 6
- ans[3] = prefix // ans = [1 1 2 6];(prefix = nums[3] * prefix = 4 * 6 = 24
4、计算后缀积,直接填入ans中
nums = [1 2 3 4]
ans = [1 1 2 6]
- ans[3] = ans[3] * postfix = 6 * 1 = 6 // ans = [1 1 2 6];postfix = postfix * nums[3] = 1 * 4 = 4
- ans[2] = ans[2] * postfix = 2 * 6 = 12 // ans = [1 1 12 6];postfix = postfix * nums[2] = 4 * 3 = 12
- ans[1] = ans[1] * postfix = 1 * 12 = 12 // ans = [1 12 12 6];postfix = postfix * nums[1] = 12 * 1 = 24
- ans[0] = ans[0] * postfix = 1 * 24 = 24 // ans = [24 12 12 6];postfix = postfix * nums[2] = 24 * 1 = 24
var productExceptSelf = function(nums) {
let ans = new Array(nums.length);
let prefix = 1;
let postfix = 1;
// 计算前缀积
for(let i = 0; i < nums.length; i++){
// 将每一个数的前缀积,存到ans中
ans[i] = prefix;
prefix = nums[i] * prefix;
}
// 计算后缀积
for(let j = nums.length - 1; j >= 0; j--){
// 反向遍历 ==> 后缀积 * 前缀积, 并直接返回到ans中
ans[j] = ans[j] * postfix; // 总的积 = 前缀积 * 后缀积
postfix = postfix * nums[j]; // 更新后缀积
}
return ans;
};
73.矩阵置0
思路:
二维矩阵,一行为一个数组;
行为0,则该数组为0;
列为0,则每一个数组的该下标位置元素 置为0;
var setZeroes = function(matrix) {
let cols = new Array(matrix[0].length).fill(1);
let rows = new Array(matrix[0].length).fill(1);
for(let i = 0; i < matrix.length; i++){
for(let j = 0; j < matrix[i].length; j++){
if(matrix[i][j] === 0){
rows[i] = 0;
cols[j] = 0;
}
}
}
for(let i = 0; i < matrix.length; i++){
if(rows[i] === 0){
// 行 该数组全为0
matrix[i].fill(0);
}
}
for(let j = 0; j < cols.length; j++){
if(cols[j] === 0){
for(let i = 0; i < matrix.length; i++){
// 列 j下标元素为0
matrix[i][j] = 0;
}
}
}
};