快慢指针-leetcode-26

发布时间 2023-04-04 10:43:04作者: 小傻孩丶儿

题目描述:

给定一个已经排序好的数组,删除重复的元素,使每个元素只出现一次,并返回新的数组长度。

不要为另一个数组分配额外的空间,必须采用 O(1) 额外内存复杂度的原地算法来解决这个问题。

示例 1:

输入: nums = [1, 1, 2]

输出: length=2, nums=[1,2]

解释: 函数应该返回新的长度2,并且原数组nums的前两个元素被修改为1, 2。 不需要在乎我们返回新数

组的长度,因为答案只是你应该在新的长度范围内输出新数组。

示例 2:

输入: nums = [0,0,1,1,1,2,2,3,3,4]

输出: length=5, nums=[0,1,2,3,4]

解释: 函数应该返回新的长度5、并且原数组nums的前五个元素被修改为0, 1, 2, 3, 和 4。 不能保留超过零

个重复项数字的数组,换句话说,对于nums中的重复项只出现一次的数字,将其不重复地填入新数组。

思路:快慢指针


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int removeDuplicates(int[] nums) {

        int slow = 0;
        int fast = 0;
        while(fast<nums.length){
            if(nums[fast]!=nums[slow]){
                slow++;
                nums[slow]=nums[fast];
            }
            fast++;
        }
        return ++slow;
    }
}
//leetcode submit region end(Prohibit modification and deletion)