LeetCode刷题记录——26 删除排序数组中的重复项
一 题目描述:
-
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后的数组的新长度;不要使用额外的数组空间,必须在原地修改数组,使得在O(1)的额外空间的条件下完成
-
示例:
-
1: 给定数组 nums = [1,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。 你不需要考虑数组中超出新长度后面的元素
-
二 思路:
-
使用双指针,采取覆盖原数组的方式进行删除重复的元素
-
代码:
-
#include<iostream> #include<vector> using namespace std; int removeDuplicates(vector<int>& nums); int main() { int v3[10] = { 0,0,2,2,4,5,6,6,8,9 }; vector<int> vecDeleted(&v3[0], &v3[9] + 1); int length = removeDuplicates(vecDeleted); cout << "now length is :" << length << endl; for (int i = 0; i < length; i++) { cout << vecDeleted[i] << endl; } return 0 ; } int removeDuplicates(vector<int>& nums) { int len = nums.size(); if (len == 0) return 0; int i = 0, j = 0; while (j < len) { if (nums[i] != nums[j]) nums[++i] = nums[j];//这里只能是++i,因为需要当前的指针指向的是已保存的不同的元素,需要将nums[j]储存到的是下一个位置,因此使用++i j++; } return i + 1; }
-