[基础算法]双指针

该文章介绍了一个LeetCode上的问题,即如何使用快慢指针在有序数组中删除重复项。通过设置快指针fast=1,慢指针slow=1,当fast指向的元素与前一个元素不同时,将其赋值给slow并移动两者,实现去重。即使fast初始为0,调整后的代码也能达到相同效果。这是一种有效的算法解决数组操作问题的方法。
摘要由CSDN通过智能技术生成

删除有序数组的重复项

26. 删除有序数组中的重复项 - 力扣(LeetCode)

#include<stdio.h>

int main()
{
	int nums[10] = { 1,2,2,2,4,6,8,8,9};
	int numsSize = sizeof(nums)/sizeof(int);
 
    if (numsSize == 0)
    {
            return 0;
    }
    int fast = 1, slow = 1;
    while (fast < numsSize) 
    {
          if (nums[fast] != nums[fast - 1]) 
          {
                nums[slow] = nums[fast];
                ++slow;
                ++fast;
          }
           else
          {
                ++fast;
          }    
    }
    
	  
	for (int i = 0; i < slow; i++)
	{
		printf("%d ", nums[i]);
	}
    return slow;
}

为什么快慢指针为1?为什么不让快指针为0,让自己指向的项与后一项相比,不同的话赋给慢指针?

其实一样slow为1,fast为0,

  int fast = 0, slow = 1;

    while (fast < numsSize)

    {

          if (nums[fast] != nums[fast + 1])

          {

                nums[slow] = nums[fast+1];

                ++slow;

          }

          ++fast;

    }

效果相同,应该也可以

思路:快指针前一项与自己指向的项不同时将后一项的值给慢指针,慢指针++,快指针++;

如果相同,快指针++;快指针需要遍历数组;

1,4为快指针与前一项不同的情况 ,2,3为相同的情况;后面以此类推

考虑特殊情况数组大小为0

太难了,导致我拖了好几天的学习进度[哭];

可以看看力扣里面的视频讲解

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值