splice() 方法向/从数组添加/删除项目,并返回删除的项目。可以添加。
var merge = function(nums1, m, nums2, n) {
nums1.splice(m,n,...nums2);
nums1.sort(function(a,b){return a-b});
};
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。该方法会改变原始数组。
var merge = function(nums1, m, nums2, n) {
nums1.splice(m,n);
nums1=[...nums1,...nums2];
nums1.sort(function(a,b){return a-b});
};//不可行,运行后nums1长度为m,不再是m+n
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。是一种栈的方式。
var merge = function(nums1, m, nums2, n) {
nums1.splice(m,n);
nums1.push(...nums2);
nums1.sort(function(a,b){return a-b});
};//但用push是可以的,而且比splice直接添加速度更快!
理解双指针,其实就是定位两种标志。
本题可以一个0,一个非零,依次遍历就可以了,将0和非0交换位置。
var moveZeroes = function(nums) {
let j=0;
for(let i=0;i<nums.length;i++){
if(nums[i]!=0){
if(i!=j){[nums[j],nums[i]]=[nums[i],nums[j]];}//注意交换的用法
j++;
}
}
return nums;
};
可以多次购买,只要是上升趋势都可以购买。
var maxProfit = function(prices) {
let max = min = prices[0];
let lirun = sum = 0;
for(let num of prices){
if(Math.max(num,max) == num){
max = Math.max(num,max);
min = Math.min(num,min);
lirun = Math.max(max-min,lirun);
}
else{
max = num;
min = num;
sum += lirun;
lirun = 0;
}
}
if(lirun!=0){sum += lirun;}
return sum;
};
更简洁的贪心算法,不是实际买卖时间,只要是上升的就算利润。
var maxProfit = function(prices) {
let len = prices.length;
let sum = 0;
for(let i = 1;i<len;i++){
sum+=Math.max(0,prices[i]-prices[i-1])
}
return sum;
};
简单数组题到此结束,这类题大多只需要一个循环。若是n2复杂度,则要考虑如何加变量,双指针来减少一次循环。
注意,数组sort函数不能直接用于数字排序,会有错误,需要function(a,b){return a-b}
splice函数不但可以删除也可以插入,会改变数组长度。
push,pop是栈的用法,不会改变数组长度。