LeetCode 26 删除有序数组种中的重复项(C++)

目录

题目要求:

解题思路:

方法:双指针

图解:

具体操作:

 具体代码:


题目要求:

要求:

 判题标准:

 

 示例:

解题思路:

方法:双指针

  • 首先分别定义两个指针fastslow代表数组元素的下标,两指针起始位置相同。
  • 当fast和slow对应下标元素相等时,则执行:fast+1,slow不动,继续进行判断;
  • 当fast和slow对应下标元素不相等时,则执行:slow+1对应的元素等于fast对应的元素,并且进行fast++;
  • 最后,fast访问越界,循环结束,这样的话,0到最终slow所对应的元素就是所求。 

图解:

具体操作:

  • 定义快慢指针;
    //fast 和 slow 起始位置相同
    int fast=0;
    int slow=0;
  •  遍历数组并进行判断。
    while(fast<nums.size()){
        //fast 和 slow 相等,fast 前进
        if(nums[fast]==nums{slow]) {
            fast++;
        }
        //fast 和 slow 对应元素不相等时,fast 对应元素赋给 slow,并且 slow 前进
        else{
             nums[++slow]=nums[fast++];
        }
    }

 具体代码:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int fast=0;
        int slow=0;
        //fast和flow初始位置相同
        while(fast<nums.size()){
            if(nums[fast]==nums[slow]){
                fast++;
            //fast和slow相等时fast前进
            }else{
                //nums[slow]=nums[fast];
                //slow++;
                nums[++slow]=nums[fast++];
            //fast和slow对应元素不相等时,fast对应元素赋值给slow对应元素,并且slow前进
            }
        }
        return slow+1;
    }
};

猜你喜欢

转载自blog.csdn.net/m0_62573214/article/details/127505218