• 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;
        }
  • 相关阅读:
    C# Volatile
    C#索引器
    04Prism WPF 入门实战 Module
    No module named '_bz2'
    pandas day01
    实例讲解虚拟机3种网络模式(桥接、nat、Hostonly)
    asp.net 截屏 截取web页面
    c# winform 截图 网页
    delphi AddObject 用法
    DBGrid 更变数据内容显示
  • 原文地址:https://www.cnblogs.com/skillking/p/9693823.html
Copyright © 2020-2023  润新知