给你一个升序排列的数组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
}