1、总结:
我太难了,想想第二题的时候,再想想今天,告诉自己苟住…
2、题目:
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Example:
Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
Follow up:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
3、我的解决方法:
今天这道题第一个解法调试的时候直接报超时?,代码在下面:
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
if(nums && nums.length > 0) {
let subLen = nums.length;
let maxSum = nums[0];
// let subArr = [];
while(subLen >= 1) {
for(let i = 0; i <= nums.length - subLen; i++){
// 注意 slice 和 splice 的差异
let tempArr = nums.slice(i, i + subLen);
if(eval(tempArr.join("+")) > maxSum) {
maxSum = eval(tempArr.join("+"));
// subArr = tempArr
}
}
subLen--;
}
return maxSum;
} else {
return false;
}
};
看到提示语说分而治之,我再想想:
4、其他人的解法:
还是不是很懂,先放别人的解法:
// 方法二:
function maxSubArray(A) {
var prev = 0;
var max = -Number.MAX_VALUE;
for(var i = 0; i < A.length; i++) {
prev = Math.max(prev + A[i], A[i]);
max = Math.max(max, prev);
}
return max;
}
这个解法能看明白,但是思路不能捋顺畅,我还在纠结…
找到一个更有意思的解法:
// 方法三:
var maxSubArray = function(nums) {
for (let i = 1; i < nums.length; i++) {
nums[i] = Math.max(nums[i], nums[i] + nums[i - 1]);
}
return Math.max(...nums)
};