leetcode. 26 删除排序数组中的重复项

解法一:解法一是我最喜欢的解法,将设一个指针count,遇到相等的跳过 不管他,遇到不相等的添加到nums[count],然后count++。

时间复杂度O(N),空间复杂度O(1)

public int removeDuplicates(int[] nums) {
       
        if(nums.length < 2) return nums.length;
        int count = 1;
        for(int i = 1; i < nums.length; ++i) {
            if(nums[i] != nums[i-1]) {
                nums[count++] = nums[i];
            }
        }
            
        return count;
    }

javaScript描述:

var removeDuplicates = function(nums) {

    if (nums.length < 2) return nums.length;

    let count = 1;

    for (let i = 1; i < nums.length; i++) {

        if(nums[i] != nums[i - 1]) {

            nums[count++] = nums[i];

        }

    }

    return count;

};

 

解法二:双指针,设指针i和j

时间复杂度O(N),空间复杂度O(1)

public int removeDuplicates(int[] nums) {
        int i = 0;
        for (int j = 1; j < nums.length; ++j) {
            if (nums[i] != nums[j]) {
                nums[++i] = nums[j];
            }
        }
        return i+1;
    }

解法三:和解法一差不多,不过比解法一多做了几步

public int removeDuplicates(int[] nums) {
        int count = 0;
        int n = nums.length;
        for (int i = 1; i < n; i++) {
            if (nums[i] == nums[i - 1]) {
                count++;
            }else {
                nums[i - count] = nums[i];
            }
        }
        return n - count;
    }

 

Guess you like

Origin blog.csdn.net/a66666_/article/details/106271443