陕西网络公司网站建设,wordpress收款插件,wordpress5.1好用,rp网站自动跳转图片怎么做【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主#xff0c;题解使用C语言。#xff08;若有使用其他语言的同学也可了解题解思路#xff0c;本质上语法内容一致题解使用C语言。若有使用其他语言的同学也可了解题解思路本质上语法内容一致 【题目描述】
给你一个有序数组 nums 请你 原地 删除重复出现的元素使得出现次数超过两次的元素只出现两次 返回删除后数组的新长度。
不要使用额外的数组空间你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
【说明】
为什么返回数值是整数但输出的答案是数组呢
请注意输入数组是以「引用」方式传递的这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
// nums 是以“引用”方式传递的。也就是说不对实参做任何拷贝
int len removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i 0; i len; i) {print(nums[i]);
}
【示例一】
输入nums [1,1,1,2,2,3]
输出5, nums [1,1,2,2,3]
解释函数应返回新长度 length 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。
不需要考虑数组中超出新长度后面的元素。
【示例二】
输入nums [0,0,1,1,1,1,2,3,3]
输出7, nums [0,0,1,1,2,3,3]
解释函数应返回新长度 length 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。
不需要考虑数组中超出新长度后面的元素。
【提示及数据范围】
1 nums.length 3 * 10的4次方-10的4次方 nums[i] 10的4次方nums 已按升序排列
【代码】
// 本题是上一题的变体每个数字从只能保留一个到只能保留两个。对上上次保留下来的数字进行检查即可。
int removeDuplicates(vectorint nums) {int len nums.size();if(len 2) return len;int slow 2,fast 2;while(fast len){if(nums[slow-2] ! nums[fast]){nums[slow] nums[fast];slow;}fast;}return slow;
}