美文网首页
80.Remove Duplicates from Sorted

80.Remove Duplicates from Sorted

作者: 兰缘小妖 | 来源:发表于2017-02-24 11:11 被阅读9次

    Follow up for "Remove Duplicates":
    What if duplicates are allowed at most twice?
    给定一个有序的整数数列,每个数最多只能出现两次,然后去除多余的数,把剩下的数排在原数组的前面,并返回新数列的长度

      这虽然是个中等题,不过难度不大,唯一需要多考虑的就是在原数组前面排列新的数组

    For example

    Given sorted array 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. It doesn't matter what you leave beyond the new length.

    My Solution

    (Java) Version 1 Time: 1ms:

      做出的方法还是各种立flag,,没什么多解释的,就是遍历一遍,然后跳过重复多的,然后符合标准的就放到前面去,甚至都不用交换

    public class Solution {
        public int removeDuplicates(int[] nums) {
            if (nums.length == 0)
                return 0;
            int count = 1, tempcount = 1, temp = nums[0], index = 1;
            for (int i = 1; i < nums.length; i++) {
                if (nums[i] == temp) {
                    if (tempcount < 2) {
                        tempcount++;
                        nums[index] = nums[i];
                        index++;
                        count++;
                    }
                } else {
                    temp = nums[i];
                    tempcount = 1;
                    nums[index] = nums[i];
                    index++;
                    count++;
                }
            }
            return count;
        }
    }
    

    (Java) Version 2 Time: 0ms (By StefanPochmann):

      别人家的姿势水平就是高很多,能如此简单地解答,关键在于题目中给出的是有序数列,所以后面的数一定是比前面的大,或者说不同,就不用考虑后面还会有和前面相同数的情况

    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

          本文链接:https://www.haomeiwen.com/subject/notwwttx.html