Remove Duplicates From Sorted Array

lc 26

constant space 要求 所有的元素包括重复的值存一次

    public int removeDuplicates(int[] nums) {
        if(nums == null || nums.length == 0) return 0;
        int end = 0;
        for(int i = 0; i < nums.length; i++){

            while( i < nums.length - 1 && nums[i] == nums[i + 1]){
                i++;
            }

            nums[end] = nums[i];
            end++;

        }
        return end;

    }

lc 80

可以重复两次,做法完全一致,只是用来判断到底是不是重复元素,如果似的话,那么久移动2个就好了,如果不是重复元素的话,那么只移动一位其他的完全一样

public class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums == null || nums.length == 0) return 0;
        int end = 0;
        for(int i = 0; i < nums.length; i++){
            int count = 1;
            while(i < nums.length - 1 && nums[i] == nums[i + 1]){
                count++;
                i++;
            }
            if(count == 1){
                nums[end] = nums[i];
                end++;
            }else{
                for(int k = 0; k <= 1; k++){
                    nums[end] = nums[i];
                    end++;
                }                
            }
        }
        return end;
    }
}

下面是非常简练的写法自己写不出来

public int removeDuplicates(int[] nums) {
    int i = 0;
    for (int n : nums)
        if (i < 2 || n > nums[i-2])
            nums[i++] = n;
    return i;
}

results matching ""

    No results matching ""