当前位置:   article > 正文

力扣80.删除有序数组中的中的重复项_力扣 删除有序数组中的重复项

力扣 删除有序数组中的重复项

删除有序数组中的重复项:
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

个人思路:
定义一个尾下标 tail;
定义一个数num表示重复的最后那个数;
定义一个数flagNum来判断重复了几次;
定义一个数length最后输出结果。
对数组进行循环操作;
重复次数大于2的不进行任何操做;
重复次数小于3的就把当前循环的数赋给尾下标所在的位置;
循环的时候发现相同,flagNum就加一,
发现不同,flagNum就变成一。

class Solution {
    public int removeDuplicates(int[] nums) {
        int length = 0;
        int tail = 0;
        int flagNum = 0;
        int num = nums[0] - 1;
        for(int i = 0; i < nums.length; i++){
            if(nums[i] == num){
                flagNum++;
            }else{
                flagNum = 1;
                num = nums[i];
            }
            if(flagNum < 3){
                nums[tail] = nums[i];
                tail++;
                length++;
            }
        }
        return length;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

个人思路二: 前两项直接保留,和 tail - 2 项不同的的被保留,不同的继续往下。

class Solution {
    public int removeDuplicates(int[] nums) {
        int length = 0;
        int tail = 0;
        for(int i : nums ){
            if((tail < 2)||(i != nums[tail - 2])){
                nums[tail++] = i;
                length++;    
            }
        }
        return length;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号