纯前端网站怎么做rest,签约做网站模板,中小企业网站建设公司首选,制作图片的软件哪个好用题目 给你一个 升序排列 的数组 nums #xff0c;请你 原地 删除重复出现的元素#xff0c;使每个元素 只出现一次 #xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度#xff0c;所以必须将结果放在数组nums的第一…题目 给你一个 升序排列 的数组 nums 请你 原地 删除重复出现的元素使每个元素 只出现一次 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度所以必须将结果放在数组nums的第一部分。更规范地说如果在删除重复项之后有 k 个元素那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 判题标准: 系统会用下面的代码来测试你的题解: int[] nums […]; // 输入数组 int[] expectedNums […]; // 长度正确的期望答案 int k removeDuplicates(nums); // 调用 assert k expectedNums.length; for (int i 0; i k; i) { assert nums[i] expectedNums[i]; } 如果所有断言都通过那么您的题解将被 通过。 示例 1 输入nums [1,1,2] 输出2, nums [1,2,_] 解释函数应该返回新的长度 2 并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。 示例 2 输入nums [0,0,1,1,1,2,2,3,3,4] 输出5, nums [0,1,2,3,4] 解释函数应该返回新的长度 5 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。 提示 1 nums.length 3 * 104 -104 nums[i] 104 nums 已按 升序 排列 来源力扣LeetCode 链接https://leetcode.cn/problems/remove-duplicates-from-sorted-array 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 题解思路
喜新厌旧就是将不存在过的数字放到set中返回set的大小同时将set中放入字符的顺序按照从0开始的顺序放到nums中。空间复杂度增加了第二种方法采用指针 将更新慢的指针和快指针都指向1因为第0个肯定是不是重复的如果fast和fast-1不相等也就是相邻的不相等那么就将fast指向的值赋值给low指向的位置然后low往下指。
代码
class Solution {
public:int removeDuplicates(vectorint nums) {setint hash;int k 0;for(int i0;inums.size();i){if(hash.find(nums[i])hash.end()){nums[k] nums[i];hash.insert(nums[i]);}}return hash.size();}
};class Solution {
public:int removeDuplicates(vectorint nums) {if(nums.size()0){return 0;}int low 1;int fast 1;while(fastnums.size()){if(nums[fast]!nums[fast-1]){nums[low] nums[fast];low;}fast;}return low;}
};