数组-删除重复项

时间:2021-08-09
本文章向大家介绍数组-删除重复项,主要包括数组-删除重复项使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

/*

不考虑删重后数组后面多出来的长度,实际上只是赋值操作,并没有真的删除元素。

*/

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;
}

原文地址:https://www.cnblogs.com/xiao-wang-zi/p/15117419.html