- 有序数组原地去重
int removeDuplicates(vector<int>& arr, int k){int index=k;for(int i=k;i<arr.size();++i){if(arr[i]!=arr[index-k]){arr[index++]=arr[i];}}return index;}
- 有序链表原地去重
用快慢指针
ListNode* removeDupLink(ListNode* head){if(head==nullptr||head->next==null) return head;ListNode* slow=head;ListNode* fast=head;while(fast!=nullptr){if(fast->val!=slow->val){slow->next=fast;slow=fast;}fast=fast->next;}slow->next=nullptr;return head;}

- 移除元素

默写快慢指针
int moveValueTail(vector<int>& arr, int val){int slow=0;int fast=0;while(fast<arr.size()){if(arr[fast]!=val){arr[slow]=arr[fast];slow++;}fast++;}return slow;}
- Leetcode 283 移动零
给你输入一个数组
nums,请你原地修改,将数组中的所有值为 0 的元素移到数组末尾
题目让我们将所有 0 移到最后,其实就相当于移除nums中的所有 0,然后再把后面的元素都赋值为 0 即可。
void moveZero(vector<int>& arr){
int position=moveValueTail(arr,0);
for(int i=position;i<arr.size();++i){
arr[i]=0;
}
}
