leetcode_middle_73_80. Remove Duplicates from Sorted Array II

来源:互联网 发布:数据分析论坛推荐 编辑:程序博客网 时间:2024/06/09 14:06

题意:

给一个有序数组,对于其中每种数字,如果多于两个,则去除多于两个的部分,并返回新数组的长度。


分析:

从旧数组到新数组,第一想法就是遍历旧数组(一个指针),生成新数组,一个指针。

那么,什么时候新数组的指针移动呢?(即放入新数组)应该是当旧数组的相邻数值不同的时候。

一种数字,只有一个:放这个进入新数组

一种数字,只有两个:放这两个进入新数组

一种数字多于两个,多于的就不放了,但要确认已经放入了两个。

现在的问题是,如何判断是哪种情况:我们先尝试合并转化以上三种情况:当一种数字少于等于两个的时候,就全部放入。

那么放入条件:同一种数字有一个或两个,就放入一个或两个。

换言之:只要不是同一种数字出现第三次,前面的出现多少就放多少。

所以再思考放入条件:当一个数字出现第三次及以上的时候不放入,其它时候放入。


现在,问题转化:什么时候知道数字出现第三次呢?=》当新数组已经有两个的时候。

所以:只要不是第三个相同的就放入。

public class Solution {       public int removeDuplicates(int[] nums) {        int j = 0;        for (int i=0; i<nums.length; i++)            if (j < 2 || nums[i] != nums[j-2]){                nums[j] = nums[i];                j++;            }        return j;    }}

反思:对于一个问题要紧紧抓住实质,去分析,转化,从多个方面来分析,归并,转化,分解。比如:思考什么是要放入的,可以转而思考什么是不放入的......

0 0
原创粉丝点击