(1) Eliminar caracteres adyacentes mayores o iguales a 2 en la cadena
var str = 'abbbaca';
var array = str.split('');
function del(arr) {
var obj = {
};
if(!arr.find((item, index) => item == arr[index + 1])) {
str = arr.join('')
return
}
var index = arr.findIndex((item, index) => {
if (!obj.hasOwnProperty(item)) {
obj[item] = 0
}
if (item == arr[index + 1]) {
obj[item]++
}
if (item == arr[index - 1] && item != arr[index + 1]) {
obj[item]++
return true
}
});
arr.splice(index + 1 - obj[arr[index]], obj[arr[index]])
del(arr)
}
del(array)
console.log(str);
(2) Suma máxima de subsecuencia
// 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
var list = [-2, 1, -3, 4, -1, 2, 1, -5, 4, 12, 1, -10, -2, 5]
function MaximumSuborderSum(nums) {
var length = nums.length
var arr = []
for (var i = 0; i < length; i++) {
arr.push(sum(i + 1))
}
var maxValue = calculateMax(arr);
console.log(arr);
console.log('最大值为:' + maxValue.count + ', 子数组为:' + list.splice(maxValue.index[0], maxValue.num));
}
// 求相邻下标的和
function sum(num) {
var maxArr = []
for (var i = 0; i < list.length; i++) {
if (index === list.length - num) return
var max = 0
var index = num === 1 ? [i] : [i, i + num - 1]
for (var j = i; j < i + num; j++) {
max += list[j]
}
maxArr.push({
count: max,
index: index,
num: num
})
}
return calculateMax(maxArr)
}
// 求数组对象的最大值
function calculateMax(maxArr) {
var maxObj = {
}
maxArr.forEach((item, index) => {
if (index === 0) maxObj = item
if (index === maxArr.length - 1) return
if (maxObj.count < maxArr[index + 1].count) {
maxObj = maxArr[index + 1]
}
})
return maxObj
}
MaximumSuborderSum(list)