一、打卡July21~24
1、删除排序数组中的重复项
给你一个升序排列的数组nums,请你原地删除重复出现的元素,返回删除后数组的新长度。
var removeDuplicates = function(nums){
var n = nums.length;
if(n==0){
return 0;}
var left = 0;
for(var right = 1;right < nums.length;right++){
if(nums[left] != nums[right]){
// [nums[left-1],nums[right]] = [nums[right],nums[left-1]]
nums[left+1]=nums[right];
left++;
}
continue;
}
console.log(left,right);//4 9
//删除left+1开始后面的right-left项的元素
nums.splice(left + 1, right-left);
console.log(nums);
return left+1;
}
console.log(removeDuplicates([0, 0, 1, 1, 1, 2, 2, 3, 4]))//5
2、买卖股票的最大利润
给你一个整数数组prices,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多只能持有 一股股票。你也可以先购买,然后在同一天出售。返回 你能获得的最大利润 。
var maxProfit = function(prices) {
var totall =0;
for(var i=0;i<prices.length-1;i++){
totall+= Math.max((prices[i+1]-prices[i]),0)
}
return totall;
};
console.log(maxProfit([7,1,5,3,6]));//0+4+3=7
3、轮转数组
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
var rotate = function(nums, k) {
var newArr=[];
for(var i=0;i<nums.length;i++){
newArr[(i+k)%(nums.length)] = nums[i]
//所有元素下标左移k,超过数组长度的用取余
}
for(var i=0;i<nums.length;i++){
nums[i] = newArr[i]
}
return nums;
};
console.log(rotate([1,2,3,4,5,6,7],3));//[5, 6, 7, 1, 2, 3, 4]
4、存在重复元素
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false
var containsDuplicate = function(nums) {
nums.sort();
console.log(nums);
const n = nums.length;
for (let i = 0; i < n - 1; i++) {
if (nums[i] === nums[i + 1]) {
return true;
}
}
return false;
};
console.log(containsDuplicate([1,6,1,1,2,3,4,4,5]));//true
侵权可删(算法来自力扣)