每日一题:给你一个有序数组nums,请你原地删除重复出现的元素。

给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过俩次包括俩次的元素只出现一次,返回删除后的数组的新长度。

  • 注意:不要使用额外的数组空间,你必须在原地修改输入数组并且使用O(1)额外空间的条件下 完成。
let nums = [1,2,2,3,3,3,4,4,4,4,5];

function removeDuplicates(nums){
    
    
  let index = 0;
  for(let i =1;i<nums.length;i++){
    
    
    if(nums[index] != nums[i]){
    
    
      nums[++index] = nums[i];
    }
  }
  nums.length = index+1;
  return index+1;
}

console.log(removeDuplicates(nums));

思路:

实现一个快慢双指针的遍历排序

  • 永远和当下的已确定的不重复项做比对。

提高拓展

给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过俩次不包括俩次的元素只出现一次,返回删除后的数组的新长度。

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function (nums) {
    
    
    let k = 2;//超过的次数
    if (nums.length <= k) return nums.length;
    let slow = k, fast = k;
    while (fast < nums.length) {
    
    
        if (nums[fast] != nums[slow - k]) {
    
    
            nums[slow] = nums[fast];
            slow++
        }
        fast++;
    }
    nums.length = slow;
    return slow
};

猜你喜欢

转载自blog.csdn.net/m0_46672781/article/details/135129045