给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:
更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
返回 k 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
使用双指针法,因为数据已经是排序的,可以使用两个指着:快指针和慢指针,将重复的元素放到数组的末尾,只保留不重复的元素。
具体而言,可以将慢指针指向数组的开头,快指针指向数组的第二个元素。如果两个元素指向的元素相等,则将快指针向前移动一位,否则,将慢指针向前移动一位,并将其所指向的元素替换为快指针所指向的元素。
// 删除重复出现的元素 // 使每个元素只出现一次 class Solution { public: int removeDuplicates(vector<int>& nums) { if(nums.empty()) return 0; // 如果数组为空,返回0 int low = 0; // 慢指针指向数组开头 // 快指针指向数组第二个元素 for(int fast = 1; fast < nums.size(); fast++) { if(nums[fast] != nums[low]) // 如果两个指针指向的元素不相等 { low++; nums[low] = nums[fast]; // 将慢指针指向的的元素替换为快指针指向的元素 } } return low + 1; } };
标签:数组,删除,nums,元素,fast,有序,指向,指针 From: https://www.cnblogs.com/Bingley-Z/p/17448483.html