计算之魂1-4章思考题(更新中……)
数组最大和区间
这个问题在LeetCode中也有
const dataOfQ1 = [15, -123, 32, -55, 232, 32, -14, -122, 342, 54, -78, 11, -49];
const findMaxSumOfArr = (nums) => {
let ans = nums[0];
let sum = 0;
for(const num of nums) {
if(sum > 0) {
sum += num;
} else {
sum = num;
}
ans = Math.max(ans, sum);
}
return ans;
}
数组寻找一个区间和等于某数字
// 解析参考 https://zhuanlan.zhihu.com/p/476641538
const findRangeSumEqualsTarget = (arr, target) => {
const map = new Map();
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
if (sum === target) {
return [0, i];
}
if (map.has(sum - target)) {
return [map.get(sum - target) + 1, i];
}
if (!map.has(sum)) {
map.set(sum, i);
}
}
return [-1, -1];
}
const data = [2, -3, 5, -7, 11, 13, 17, -19];
console.log(findRangeSumEqualsTarget(data, 24));
寻找最大的二维矩阵