数组-删除重复项
/*
不考虑删重后数组后面多出来的长度,实际上只是赋值操作,并没有真的删除元素。
*/
1.对于有序数组而言
//双指针解决
public int removeDuplicates(int[] A) {
//边界条件判断
if (A == null || A.length == 0)
return 0;
int left = 0;
for (int right = 1; right < A.length; right++)
//如果左指针和右指针指向的值一样,说明有重复的,
//这个时候,左指针不动,右指针继续往右移。如果他俩
//指向的值不一样就把右指针指向的值往前挪
if (A[left] != A[right])
A[++left] = A[right];
return ++left;
}
2.对无序数组而言
//同冒泡,时间O(n^3)
//不如排个序再双指针
int removeDuplicates(int* nums, int numsSize){
int len = 0;
for (len = 0; len < numsSize; len++) {
for (int i = len + 1; i < numsSize; i ++) {
/*若元素相同,则将后面的元素依序往前移动一位,将数组范围 -1,等同于将被比较的元素删除*/
if (nums[len] == nums[i]) {
for (int j = i; j < numsSize - 1; j ++) {
nums[j] = nums[j + 1];
}
numsSize --;
/*若有相同元素,需要判断新的nums[i]是否重复*/
i --;
}//end if
}
}
return numsSize;
}

浙公网安备 33010602011771号