写在前面 简单题码代码日常问题笔记,关键词:记 下标临界值细节处理,0 / 1 开头问题 题目详情 26.删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 注意 有序数组!!! 单调不减inx 记录不重复数字个数 / 下标如果 nums[i] != nums[i - 1] ,出现新的不重复值,nums[inx++] = nums[i]; ac代码 个人版 class Solution { public: int removeDuplicates(vector<int>& nums) { int n = nums.size(); if(n==0) return 0; int inx = 1; for(int i =1; i<n; i++) { if(nums[i]!=nums[i-1]) nums[inx++] = nums[i]; } return inx; } }; 参考版 class Solution { public: int removeDuplicates(vector<int>& nums) { int n = nums.size(); if (n == 0) { return 0; } int index = 0; // nums[0]不变,index从1开始赋值。 for (auto i = 1; i < n; ++ i) { if (nums[i] != nums[i - 1]) { index ++; nums[index] = nums[i]; } } return index + 1; } };