Leetcode 26. 删除有序数组中的重复项(简单) 83. 删除排序链表中的重复元素(简单) 27. 移除元素(简单) 283. 移动零(简单)数组操作原地移除

labuladong讲解

基本思想都是使用快慢指针,快指针去查找值,慢指针保存值

26. 删除有序数组中的重复项(简单)

 

 思路:

我们让慢指针 slow 走在后面,快指针 fast 走在前面探路,找到一个不重复的元素就告诉 slow 并让 slow 前进一步。这样当 fast 指针遍历完整个数组 nums 后,nums[0..slow] 就是不重复元素。

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int slow=0,fast=0;
        while(fast<nums.size()){
            if(nums[slow]!=nums[fast]){
                slow++;
                nums[slow]=nums[fast];
            }
            fast++;
        }
        return slow+1;
    }
};

 

83. 删除排序链表中的重复元素(简单)

思路:

操作换为链表

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head==nullptr){
            return head;
        }
        ListNode* slow=head;
        ListNode* fast=head;
        while(fast!=nullptr){
            if(slow->val!=fast->val){
                // nums[slow] = nums[fast];
                slow->next=fast;
                // slow++;
                slow=slow->next;
            }
            fast=fast->next;
        }
        // 断开与后面重复元素的连接
        slow->next=nullptr;
        return head;
    }
};

 

27. 移除元素(简单)

题目:

 

 思路:

题目要求我们把 nums 中所有值为 val 的元素原地删除,依然需要使用 双指针技巧 中的快慢指针:

如果 fast 遇到需要去除的元素,则直接跳过,否则就告诉 slow 指针,并让 slow 前进一步。

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int l=0,r=0,n=nums.size();
        for(r=0;r<n;++r)
        {
            if(nums[r]!=val)
            {
                nums[l++]=nums[r];
            }
        }
        return l;
    }
};

 

283. 移动零(简单)

题目:

给你输入一个数组 nums,请你原地修改,将数组中的所有值为 0 的元素移到数组末尾

比如说给你输入 nums = [0,1,4,0,2],你的算法没有返回值,但是会把 nums 数组原地修改成 [1,4,2,0,0]

思路:

与移除元素相同,在最后slow-n-1置零

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int slow=0,fast=0;
        while(fast<nums.size()){
            if(nums[fast]!=0){
                nums[slow]=nums[fast];
                slow++;
            }
            fast++;
        }
        for(;slow<nums.size();++slow){
            nums[slow]=0;
        }
    }
};

 

posted @ 2022-02-28 16:59  鸭子船长  阅读(27)  评论(0编辑  收藏  举报