- 有序数组原地去重
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;
}
}