zoukankan      html  css  js  c++  java
  • 80. Remove Duplicates from Sorted Array II

    一、题目

      1、审题

      2、分析

        给出一个有序的整数数组,统计总共有多少个元素,其中同一个整数最多只能存在两个,并将统计的所有整数放在数组前头。(只能借助一个额外的空间)

    二、解答

      1、思路:

        方法一、

          ①、若数组长度 len <= 2, 则直接返回数组长度。

          ②、len > 2时,从下标 i = 2 开始遍历,用 total 记录元素个数

              若 nums[i] != nums[i-2],则此元素为新元素,total++;

              若 nums[i] == nums[i-2],则此元素为重复元素,将 i 后边的元素向前移动一个单元。

    (不知道为啥 LeetCode 提交通不过。。。。)

    public int removeDuplicates(int[] nums) {
            
            if(nums.length <= 2)
                return nums.length;
            int total = 2;
            for (int i = 2; i < nums.length && nums[i] != -1 ; i++) {
                if(nums[i] != nums[i-2]){
                    total++;
                }
                else {    // 前面已经存在 2 个相等的了
                    for(int j = i; j < nums.length - 1; j++)
                        nums[j] = nums[j+1];
                    for (int j = nums.length-(i+1-total); j < nums.length; j++) { // 将后边不用的赋值 -1
                        nums[j] = -1;
                    }
                    if(nums[i] == nums[nums.length - 1] )
                        break;    // 结束循环
                    --i;
                    
                }
            }
            return total;
        }

        方法二、

          直接遍历数组元素,用 i 记录数组中存放的出现不超过2次的整数。

          判断方程为:     nums[i-2] != n

          则为符合的整数, nums[i++] = n;

    public int removeDuplicates(int[] nums) {
            int i = 0;
            for (int n : nums)
                if (i < 2 || n > nums[i-2])
                    nums[i++] = n;
            return i;
        }
  • 相关阅读:
    Python3.7安装PyQt5的方法
    安装MySQLdb for Python3.7
    在Python中操作谷歌浏览器
    Python 安装pyautogui
    Python 安装selenium
    Python 安装urllib3
    Python使用SMTP发送邮件
    使用Python定时执行一任务,自动登录某web系统,生成报表,然后发送邮件给指定人员
    AutoHotKey 使用ADODB读取Excel 报ADODB.Connection 未找到提供程序,可能未提供
    绘制一个网格的程序
  • 原文地址:https://www.cnblogs.com/skillking/p/9693823.html
Copyright © 2011-2022 走看看