从排序数组中删除重复项

1、从排序数组中删除重复项
remove-duplicates-from-sorted-array: Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,Given input array A =[1,1,2],Your function should return length =2, and A is now[1,2].
题目要求:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
分析:在编写代码之前,关注题设的几点条件,这对我们把握题目重点,理解题意很重要。首先,给定的数组是排序的,这意味着我们在编写代码时不需要考虑对数组重新排序,这相当于是题目给的一个“方便”;其次,题设要求我们在原地删除重复的元素,不能够使用额外的数组空间。这就意味我们不能新建一个数组用于存放不重复的元素,从而得到最终长度。这也是本题的难点。
如何不适用额外数组空间删除元素呢?换个角度想,如果对数组nums进行遍历,设置一个用于计数的变量number, 每有一个新的数出现,就增加对number+1。也就是说,只需要比较nums[i]和nums[number]的大小即可。
分析之后,我们得到了如下代码:

public class Solution {
//在eclipse编写代码时方便调试,所以增加了mian入口,测试用,提交代码时可以不用这段
    public static void main(String[] args) {
    	Solution sl = new Solution();
        int []num = {0,1,1,2,2,3,3,4};
        int len=sl.removeDuplicates(num);
        System.out.println(len);
        for(int i=0;i<len;i++)
        {
        	System.out.print(num[i]);
        }
    }
    public int removeDuplicates(int[] nums) {
    //关注极端案例,可以使得代码更加“健壮”
        if (nums.length == 0)
            return 0;
        int number = 0;
      //不适用额外数组空间
        for (int i=0; i < nums.length ; i++) {
            if ( nums[i] != nums[number] ) {
                number++;
                nums[number] = nums[i];
            }
        }
        number+=1; 
        return number;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值