程序媛詹妮弗
终身学习

Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Given 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 respectively.

It doesn't matter what you leave beyond the returned length.

 

题意:

有序数组去重(允许某个元素重复出现两次)


 

思路:

仍然是在尽量不开新空间的情况下,直接在原数组中进行操作。(当然,我们可以想象另开了一个新的数组存储去重后的结果)

指针i来遍历原数组。

指针start 从 index 2 开始, 因为index 为 0、1 的元素是什么牛鬼蛇神都不重要。

指针start 接受指针i扫过的、符合条件的元素。

指针start 所到之处,便是新“数组”新生之时。


 

代码:

 1 class Solution {
 2     public int removeDuplicates(int[] nums) {
 3         // corner case
 4         if(nums.length == 0 || nums == null) return 0;
 5         int start = 2; 
 6         for(int i = 2; i < nums.length; i++){
 7             if(nums[i] != nums[start-2]){
 8                 nums[start] = nums[i];
 9                 start++;
10             }
11         }
12       return start;  
13     }
14 }

 

posted on 2018-06-05 00:37  程序媛詹妮弗  阅读(114)  评论(0编辑  收藏  举报