美文网首页
Leetcode-26-从排序数组中删除重复项

Leetcode-26-从排序数组中删除重复项

作者: WindMajor | 来源:发表于2018-04-08 12:22 被阅读50次

    给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。
    不要另外定义一个数组,您必须通过用 O(1) 额外内存原地修改输入的数组来做到这一点。
    示例:

    给定数组: nums = [1,1,2],
    
    你的函数应该返回新长度 2, 并且原数组nums的前两个元素必须是1和2
    不需要理会新的数组长度后面的元素
    

    分析:

    首先我们要了解,数组一旦生成之后,是不可以增删元素的,想要变更元素只能生成新的数组,而题目要求不能创建新数组。

    初一看到这里也许觉得此题无解,但要仔细读题,可以发现,不需要理会新的数组长度的后面的元素

    也就是说,只需要将后面的不重复的元素赋值给前面重复的元素位,最终数组的长度可以保持不变。

    而返回值是此有序数组中所有不重复的元素个数,在数组的前端将这些不重复的元素按顺序排布即可。

    据此分析,此题清晰明了。java解答如下:

    class Solution {
        public int removeDuplicates(int[] nums) {
            if (nums.length == 0) {
                return 0;
            }
    
            if (nums.length == 1) {
                return 1;
            }
    
            int index1 = 0;
            int index2 = 2;
            for (int i = 1; i < nums.length; i++) {
                if (nums[i] > nums[index1]) {
                    index1 += 1;
                    continue;
                } else {
                    while (index2 < nums.length) {
                        if (nums[index2] > nums[index1]) {
                            nums[i] = nums[index2];
                            index1 += 1;
                            break;
                        }
                        index2++;
                    }
                }
            }
            return index1 + 1;
        }
    }
    

    相关文章

      网友评论

          本文标题:Leetcode-26-从排序数组中删除重复项

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