给定一个有序数组,删除重复内容,使每个元素只出现一次,并返回新的长度。
不要为其他数组分配额外的空间,您必须通过在 O(1)额外的内存中就地修改输入数组来实现这一点。
例:
给定nums = [1,1,2], 你的函数应该返回length = 2,前两个nums元素分别是1和2。 无论你离开新的长度,都没有关系。
这道题的思路就是采用两个标记点 number 和 i ,number记录不重复元素的位置,i从number的下一个开始遍历数组,如果i位置的数字等于number位置的数字,说明该数字重复出现,不予处理;如果i位置的数字不等于number位置的数字,说明该数字没有重复,需要放到l的下一位置,并使number加1。
AC代码如下
-
public class leetcode26 {
-
public static void main(String[] args) {
-
leetcode26 lt = new leetcode26();
-
int []num = { 0, 1, 1, 2, 2, 3, 3, 4};
-
System.out.println(lt.removeDuplicates(num));
-
}
-
-
// 扔进去AC了他
-
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; //标记+1即为数字个数
-
return number;
-
}
-
-
}