力扣(LeetCode)试题26-删除排序数组中的重复项 C++代码
回头看,解决一下以前的问题,发现几天前出现的问题好低级,代码还是要多练才可,以前停留在纸面上,太傻了
算法:双指针,第一个指针 i 指向的位置待修改,第二个指针 j 用于遍历该数组
若相邻元素值相同,第一个指针 i 不动,第二个指针 j 继续右移遍历,直到不再与 i 位置元素相同,此时将 j 位置上的元素,赋值给 i+1 位置上的元素,然后 i 右移一位。
1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 class Solution {
7 public:
8 int removeDuplicates(vector<int>& nums)
9 {
10 int val = nums.size();
11 if (val == 0) return 0;
12 else
13 {
14 int i = 0;//指向重复元素的第一个位置
15 for (int j = 1; j < val; j++)//遍历nums
16 {
17 if (nums[i] == nums[j])
18 continue;//j指向下个元素
19 else
20 {
21 nums[i + 1] = nums[j];
22 i += 1;
23 }
24 }
25 return i+1;
26 }
27 }
28 };
29
30 int main()
31 {
32 vector<int> nums = { 0, 0, 1, 1, 1, 2, 2, 3, 3, 4 };
33 int length;
34 Solution sol;
35 length = sol.removeDuplicates(nums);
36 cout << length << endl;;
37 int n;
38 for (int i = 0; i < length; i++)
39 {
40 cout << nums[i] << endl;
41 }
42 cin >> n;
43 return 0;
44 }