zoukankan      html  css  js  c++  java
  • Leetcode题目:Remove Duplicates from Sorted Array II

    题目:Follow up for "Remove Duplicates":
    What if duplicates are allowed at most twice?

    For example,
    Given sorted array nums = [1,1,1,2,2,3],

    Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn't matter what you leave beyond the new length.

    解答:

    class Solution {
    public:
        int removeDuplicates(vector<int>& nums) {
            int size = nums.size();
            if(size <= 2)
                return size;
            int cur_index = 0;
            int p = 1;
            int q = 2;
            while(q < size)
            {
                if(nums[cur_index] != nums[p])
                {
                    nums[++cur_index] = nums[p++];
                    q = p + 1;
                }
                else
                {
                    if(nums[p] != nums[q])
                    {
                        nums[++cur_index] = nums[p++];
                        q = p + 1;
                    }
                    else
                    {
                        p++;
                        q = p + 1;
                    }
                }
            }
            nums[++cur_index] = nums[p++];
            return cur_index + 1;      
        }
    };

    其中,cur_index一直控制着最终应该返回的只允许两次重复的边界,而p是当前正在判断的数字,q为其下一个数字。

    自己的题解过程,看起来很复杂,其实,仔细一想,只需要一个变量记录当前的位置,需要一个变量来迭代的往后走,判断该变量指向的位置的前两个位置是否与迭代变量所指向的相同。

    优秀答案:

    class Solution {
    public:
        int removeDuplicates(vector<int>& nums) {
            int size = nums.size();
            if(size <= 2)
                return size;
            int index = 2;
            for(int i = 2;i < size;i++)
            {
                if(nums[index - 2] != nums[i])
                {
                    nums[index++] = nums[i];
                }
            }
            return index;
        }
    };

  • 相关阅读:
    Linux虚拟机突然网络不能用了但是主机能ping㣈
    010商城项目:商品类目的选择——Dao,Service.Action层的分析
    009商城项目:商品类目的选择——1前端页面分析
    《深入理解Java内存模型》读书总结
    java多线程系类:JUC线程池:06之Callable和Future(转)
    Spring中,关于IOC和AOP的那些事
    程序员面试,为什么不要大谈高并发?
    Java 面试宝典!并发编程 71 道题及答案全送上!
    面试必问的并发编程知识点,你知道多少?
    程序员必知的七种并发编程模型
  • 原文地址:https://www.cnblogs.com/CodingGirl121/p/5186327.html
Copyright © 2011-2022 走看看