let arr = [-2,1,-3,4,-1,2,1,-5,4];
function maxSubArray(arr){
let curSum = 0;
let maxSum = arr[1];
for(item of arr){
if(curSum < 0){
curSum = item;
}else{
curSum += item;
}
maxSum = maxSum > curSum ? maxSum : curSum;
}
return maxSum;
}
求出当前数组中的最大值即为数组子序列最大和,可以一边形成数组一边求最大值,也可以最后求
function maxSubArray(nums){
let pre = 0;
let max = nums[1]
nums.forEach(el => {
pre = Math.max(el, el+pre);
max = Math.max(pre , max)
});
return max;
}
var findSpecialInteger = function(arr) {
let count = 1;
let maxCount = 1;
let maxCountNum = arr[0];
let len = arr.length;
for(let i = 0; i < len; i++){
if(arr[i] === arr[i+1]){
count++;
}else{
if(count > maxCount){
maxCount = count;
maxCountNum = arr[i];
count = 0;
}
}
}
return maxCountNum;
};
特别注意 i < length; 不能写 i < length-1; 那样会漏掉一种情况:出现次数最多的数字连续出现在尾部。i < length,最后arr[i-1]和arr[i]比较;arr[i]为undefined,
1.20
6;考察:异步:事件循环机制(event loop),setTimeout内的function等到scrip标签内部事件执行完之后才执行。
1.21
如果console.log(a)就会报错,对于未定义的变量,typeof不会报错;
从右往左执行:a在立即执行函数内部声明的,b是未经声明的,默认为全局变量;b = 3;
1.22
立即执行函数的形参和实参不能搞混淆。 // undefined 形参的foo实际上是obj对象。
1.23
false,此时因为return的存在,new是不起作用的;f()的执行结果就是f函数本身,所以是false;
// true,此时的new起作用,new了f的一个实例