zoukankan      html  css  js  c++  java
  • leetcode

    Remove Duplicates from Sorted Array I

    Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

    Do not allocate extra space for another array, you must do this in place with constant memory.

    For example,
    Given input array A = [1,1,2],

    Your function should return length = 2, and A is now [1,2].

    Remove Duplicates from Sorted Array II

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

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

    Your function should return length = 5, and A is now [1,1,2,2,3].

    个人思路:

    1,将整个数组看成两个部分,前半部分是符合题目要求的数组,后半部分是待探索的数组,设置两个用于遍历的变量index和i,index用于定位前半部分数组的末尾,i用于定位后半部分的数组,在两个部分之间的元素是被剔除的元素

    2,同时设置一个变量count用于记录重复次数,再设置一个变量limit用于记录可重复的最大次数,这样一共4种情况,A[index] == A[i]时,count大于limit或者count不大于limit,A[index] != A[i]时,count大于limit或者count不大于limit

    3,通过i的遍历,不断将符合题目要求的元素加入到前半部分数组中

    代码:

     1 class Solution {
     2 public:
     3     int removeDuplicates(int A[], int n) {
     4 
     5         if (n < 2)
     6         {
     7             return n;
     8         }
     9 
    10         const int limit = 2; //I设为1,II设为2
    11         int index = 0, i = 1, count = 1;
    12 
    13         while (i < n)
    14         {
    15             if (A[index] == A[i])
    16             {
    17                 ++count;
    18                 if (count > limit)
    19                 {
    20                     ++i;
    21                 }
    22                 else
    23                 {
    24                     A[++index] = A[i++];
    25                 }
    26             }
    27             else
    28             {
    29                 A[++index] = A[i++];
    30                 count = 1;
    31             }
    32         }
    33 
    34         return index + 1;
    35     }
    36 };
    View Code

    通过这两个题目,可以总结出一个对数组进行处理的一般性方法(要求空间复杂度为常数),即将整个数组看成两个部分,前一部分是符合要求的,需要用一个变量来定位这个部分,后一部分是待处理的,通过一个变量来定位和遍历,这两部分中间可能有剩余元素(这部分是被处理过不合要求的),通过遍历处理后一部分的元素,将不断扩张前一部分的数组,直到后一部分的元素都遍历完,整个处理过程就结束了

  • 相关阅读:
    Python | PyQt5编写计时器与倒计时应用程序
    AI文件与PS文件相互导入,并分层可编辑
    maple解方程组
    有限元数值分析
    常用Latex编辑数学公式
    notion
    总结一下ANSYS中不同单元之间选择与连接问题
    参考文献的引用方法
    Abaqus CAE笔记本
    几种大文件传输的平台
  • 原文地址:https://www.cnblogs.com/laihaiteng/p/3984493.html
Copyright © 2011-2022 走看看