leetcode_26. 删除排序数组中的重复项

Given a sorted array nums, 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 by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,2],

Your function should return length = 2, with the first two elements of numsbeing 1and2respectively.

It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,0,1,1,1,2,2,3,3,4],

Your function should return length = 5, with the first five elements of numsbeing modified to 0, 1, 2,3, and 4respectively.

It doesn't matter what values are set beyond the returned length.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

Internally you can think of this:

// nums is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums);

// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

题目分析

     刚刚看到这题目的时候第一感觉使用java里的list集合,把数组添加到集合中,然后判断是否重复,如果重复直接调用remove方法。代码如下

 public static int removeDuplicates(int[] nums) {
            //创建集合
	    	List<Integer> list = new ArrayList<>();
	    	for (int i = 0; i < nums.length; i++) {
                //把数组加入集合
				list.add(nums[i]);
			}
	    	for (int i = 0; i < list.size()-1; i++) {
                // 去除重复
				if(list.get(i)==list.get(i+1)) {
					list.remove(i);
				}
			}
	    
	    	return list.size();
	    }

结果在本地测试通过,但oj上一直错误。后来仔细看了一下题目要求是在原数组上修改!!!

于是参考网上给出的答案,利用双指针法,由于是排序好了的数组,我们可以移动快慢指针,判断他们数组值是否相等,当不等时跳过重复的项,把后面的值赋值给前面的即可。

public int removeDuplicates(int[] nums) {
     if(nums.length==0)
        return 0;

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

猜你喜欢

转载自blog.csdn.net/CSDN_ACM/article/details/81321507