码迷,mamicode.com
首页 > 编程语言 > 详细

删除有序数组中的重复项II

时间:2021-04-07 11:44:26      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:完成   return   solution   fas   数组   targe   有序数组   元素   com   

题目描述

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

题解

直接用双指针。slow指针指向新的数组(输入数组的前面)的第一项,fast指针指向当前处理的输入数组的项。
若slow<1或者fast指向的元素不等于slow-1指向的元素,那么,fast指向的元素应该添加到slow维护的数组中。
最后,输入数组的0~slow项为处理后的数组。处理后的数组长度为slow + 1。
代码:

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

只遍历一遍数组,时间复杂度为O(n)。辅助空间为常数空间O(1)。

删除有序数组中的重复项II

标签:完成   return   solution   fas   数组   targe   有序数组   元素   com   

原文地址:https://www.cnblogs.com/hickey2048/p/14623403.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有
迷上了代码!