• LeetCode 80. 删除有序数组中的重复项 II 双指针


    地址 https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/

    给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
    不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
    
    
    说明:
    为什么返回数值是整数,但输出的答案是数组呢?
    请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
    你可以想象内部操作如下:
    // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
    int len = removeDuplicates(nums);
    // 在函数里修改输入数组对于调用者是可见的。
    // 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
    for (int i = 0; i < len; i++) {
        print(nums[i]);
    }
     
    示例 1:
    输入:nums = [1,1,1,2,2,3]
    输出:5, nums = [1,1,2,2,3]
    解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。
    
    示例 2:
    输入:nums = [0,0,1,1,1,1,2,3,3]
    输出:7, nums = [0,0,1,1,2,3,3]
    解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。 不需要考虑数组中超出新长度后面的元素。
    
    提示:
    1 <= nums.length <= 3 * 104
    -104 <= nums[i] <= 104
    nums 已按升序排列
    

    解答
    双指针方案
    l表示当前数组通过重复检测可以填充的位置的索引
    r表示当前检测的数字currVal是否重复的索引
    设置一个变量currVal记录当前检测是否重复的数值是多少
    设置一个变量count记录currVall重复的次数是否小于3次
    image

    class Solution {
    public:
    	int removeDuplicates(vector<int>& nums) {
    		int  cnt = 0; int l = 0; int r = 0;
    		int currV = -99999;
    		while (r < nums.size()) {
    			if (currV != nums[r]) { cnt = 0; currV = nums[r]; }
    			if (cnt < 2) {
    				nums[l] = nums[r]; cnt++;
    				l++; r++;
    			}
    			else {
    				while (r < nums.size() && nums[r] == currV) { r++; }
    				if (r < nums.size()) {
    					nums[l] = nums[r];
    					currV = nums[r]; cnt = 1;
    					l++; r++;
    				}
    			}
    		}
    
    		return l;
    	}
    };
    

    我的视频题解空间

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    再探最大公约数
    非旋treap
    初赛毒瘤汇总(持续更新中)
    架构漫谈阅读笔记五--以豆瓣得基础架构为例
    架构设计小论文
    第一阶段
    架构漫谈阅读笔记六--以淘宝数据魔方技术架构解析为例
    学习进度第八周
    架构漫谈阅读笔记一
    软件架构之 Refined Architecture阶段
  • 原文地址:https://www.cnblogs.com/itdef/p/14776356.html
Copyright © 2020-2023  润新知