1、连续子数组的最大和
var theMaxSum = function (arr) {
let max = -Infinity;
arr.reduce((total, item) => {
if (total > 0) {
total += item;
} else {
total = item;
}
max = max > total ? max : total;
return total;
}, 0)
return max;
};
2、数组中和最大的子数组
function childArrayOfTheMaxSum(arr) { // 基于上面的方法进行求解
let max = -Infinity;
// 求出最大值
arr.reduce((total, item) => {
if (total > 0) {
total += item;
} else {
total = item;
}
max = max > total ? max : total
return total
}, 0)
// 根据最大值去找子数组
for (let i = 0; i < arr.length; i++) {
let sum = 0;
let res= [];
for (let j = i; j < arr.length; j++) {
sum += arr[j];
res.push(arr[j])
if (sum === max) {
return res
}
}
}
}
3、无重复字符的最长子串的长度
var lengthOfLongestSubstring = function (str) {
let temp = ''; // 中间变量,用于比较操作
let max = 0; // 最长子串的长度
let resStr = ''; // 保存最长子串
for (let i = 0; i < str.length; i++) {
if (temp.indexOf(str[i]) === -1) {
temp += str[i]
if (max < temp.length) {
max = temp.length;
resStr = temp;
}
} else {
temp = temp.slice(temp.indexOf(str[i]) + 1) + str[i]
}
}
return [max, resStr]
};