目录
1.原题链接:
2.暴力解法:
因为这个数组是非严格递增排列的,所以我们可以使用一个 cur 指针直接遍历整个数组,val 用来记录前一个遍历的元素的值,当前一次遍历的元素的值与后一次遍历的元素的值相同时,cur 指针后所有元素都向前移动一个单位,如果此时 cur 指针所指的元素的值不等于 val 时,val=当前元素的值,cur++,如此循环,直到把整个数组遍历完。时间复杂度为O(N^2)。
3.双指针:
我们可以定义两个指针 left ,right 分别指向数组 nums 下标的0和1,当 nums[right]==nums[left] 的时候,说明这两个元素是重复项,则让 right++;如果 nums[right] != nums[left] ,说明这两个元素不是重复项,则先让 left++(left如果不先自加的话,后面的数会覆盖它),再执行 nums[left] = nums[right] ,直到right遍历完整个数组,返回 left+1(因为left最后会指向最后一个非重复项的位置)。时间复杂度为O(N)。
4.代码实现:
①.C语言版:
②.C++版:
虽然C与C++只有一个地方不一样,^-^
5.提交结果
6.读书分享:
《道德经·第二十七章》:
是以圣人常善救人,故无弃人;常善救物,故无弃物。
解释:因此,圣人善于救助人民,所以没有被遗弃的人;善于利用万物,所以没有被废弃之物。
《道德经·第二十八章》:
知其雄,守其雌,为天下谿(xī)。
解释:既有蓬勃向上的朝气,又有温良平和的心态,不求汹涌澎湃,甘当天下潺潺小溪。