力扣 题目26-- 删除有序数组中的重复项

题目


题解


 

递归:(ps:感觉我用递归用魔怔了 什么都用递归)

以下面为例 

初始全为0

然后将j向右移动 需要注意的是j每轮从c位置移动

一样的 不改变 继续向右移动

此时不一样了 我们就需要重新调用函数 将k更新至k+1 而c至为j 即

此时我们将c,j所在的值赋给k

然后继续重复上面步骤 向右移动了两次又不一样了 重新更新函数

 

这样一直到最后

此时我们一层一层返回k 别忘了接收k的时候+1

代码


 

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 int changenums(vector<int>& nums,int k,int c) {
 5     nums[k] = nums[c];
 6     for (int i = c; i < nums.size(); i++) {
 7         if (nums[c] != nums[i]) {
 8            k=changenums(nums, k + 1, i);
 9            break;
10         }
11     }
12     return k;
13 }
14 class Solution {
15 public:
16     int removeDuplicates(vector<int>& nums) {
17         if (nums.empty()) {
18             return 0;
19         }
20         int length=changenums(nums, 0, 0)+1;
21         return length;
22     }
23 };
24 int main() {
25     Solution sol;
26     vector<int> nums = { 1,1,2,5,5,6,6,6,7 };
27     int length=sol.removeDuplicates(nums);
28     cout << length << endl;
29     for (int i = 0; i < nums.size(); i++) {
30         cout << nums[i] << endl;
31     }
32 }
View Code

 

 

 

 

 

posted @ 2022-04-14 12:57  无聊的阿库娅  阅读(23)  评论(0编辑  收藏  举报