JavaScript删除排序数组中的重复项、买卖股票的最大利润、轮转数组、存在重复元素

一、打卡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

侵权可删(算法来自力扣)

猜你喜欢

转载自blog.csdn.net/m0_47147246/article/details/125958818