算法题笔记-easy难度-07删除有序数组中的重复项(leetcode第26题)

88 阅读1分钟

题目地址:leetcode-cn.com/problems/re…

思路:初看题目有点无从下手,看了题解以后才恍然大悟。题目只需要返回删除数组以后的长度,而且数组本身是有序的。使用双指针,一个慢指针,一个快指针。慢指针用来记录对比出的不一样的值,快指针用来对比。简单来说就是快指针从数组从前往后遍历,碰到和前一项不一样的值的时候,就将值传给慢指针,然后慢指针+1。快指针碰到数组边界以后循环结束,方法返回慢指针的下标即可。

上代码:

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length == 0) {
            return 0;
        }
        int slow = 1;
        int fast = 1;
        while(fast < nums.length) {
            if(nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
}