给定一个排序数组,删除重复的位置,使每个元素只出现一次,并返回新的数组长度。不要为另一个数组分配额外的空间,必须使用O(1)内存修改输入数组来实现这一点。
Given nums = [1,1,2], Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn't matter what you leave beyond the new length.
思路:用两个指针,快慢指针,一个走的快一个走的慢,然后走的慢的为i,走的快的为j=i+1,快指针每走一步和满指针进行对比,相同则删除,这题目不难,可以在纸上画两个指针,如果只看代码会有些懵...
public static int removeDup(int[] nums) { if (nums.length == 0) { return 0; } int i = 0; System.out.print(nums[i]+" "); for (int j = 0; j < nums.length; j++) { if(nums[j] != nums[i]){//这个地方要注意,不相等才进入循环以此来达到删除重复元素的目的 i++; nums[i] = nums[j]; System.out.print(nums[i]+" "); } } System.out.println(); return i+1; }public static void main(String[] args) { int[] nums = new int[]{1,1,2,2,2,3,3,4,4,5}; System.out.println(removeDup(nums)); }
输出结果(在if循环中输出需要的数组元素):
1 2 3 4 5
5