算法 删除排序数组中的重复项

给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致 。然后返回nums中唯一元素的个数。

示例

思路分析:我刚开始的思路是首先for循环遍历nums数组,让当前元素和前一个元素比较,定义一个flag变量,将重复元素赋给一个新的数组,然后定义count变量记录新数组长度,第二次遍历新数组。但因为声明数组的时候要给定数组长度且不能是变量,这种方法无法确定数组长度所以放弃,所以我想能不能将重复的值赋给原数组,赋给原数组首先要明确要赋值哪些元素,我仔细想后发现设置flag标记不仅需要二次遍历,而且无法将标记携带在要赋值的元素上,相对于的任何标记性质的变量都是没用的

        参考了答案后发现答案是用的for range遍历,其实用for循环也一样,答案找到目标元素的方法是先定义一个count,将nums[0]赋给一个临时变量,进入循环,如果当次循环中的nums[i]等于临时变量就continue跳出当次循环,如果不等则将nums[i]赋给nums[count]和临时变量以不断更新第一次出现的元素,然后count++,这样就实现将数组中第一次出现的元素赋值给原数组了,然后再返回元素数count+1

func removeDuplicates(nums []int) int {
    cur := nums[0]
    var ptr int

    for _, v := range nums{
        if v == cur {
            continue
        }

        ptr++
        nums[ptr], cur = v, v
    }

    return ptr + 1
}

猜你喜欢

转载自blog.csdn.net/qq_47431008/article/details/130233632
今日推荐