【数组、链表、跳表】Leetcode_26.删除排序数组中的重复项

  • 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
    不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

  • 解题思路:首先注意是有序数组用j记录当前数组不重复向前走的下标,当遇到不重复的数值,填进数组中。如果遇到长度为0或者1,直接返回,遍历一遍后,如果都是相同元素,则直接返回j+1,即1即可。

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

        }
     
        if(j !=0 &&nums[j-1] != nums[nums.length-1]){
            nums[j] = nums[nums.length-1];
        }
        return j+1;
    }
}

最优解:对上方我的思路里面长度-1这个做了优化,下表从1开始,然后先j++ ,再将元素放入后面,就省去了我之前的比较问题。

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

你可能感兴趣的:(算法)