码迷,mamicode.com
首页 > 其他好文 > 详细

80. Remove Duplicates from Sorted Array II

时间:2018-09-24 00:51:39      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:array   图片   移动   重复   inf   dup   空间   思路   bubuko   

一、题目

  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;
    }

 

80. Remove Duplicates from Sorted Array II

标签:array   图片   移动   重复   inf   dup   空间   思路   bubuko   

原文地址:https://www.cnblogs.com/skillking/p/9693823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!