2021年11月9日 数组字符串初次收尾&&树开卷

本文探讨了使用双指针技巧解决编程问题,包括删除数组中的重复数字和移动所有零到数组末尾。通过实例展示了如何利用快慢指针策略优化代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除重复数字

 我的想法:在后面作比较 

int removeDuplicates(int* nums, int numsSize){
    int fast,slow;"快慢指针"
    if(!numsSize) return 0;"判断空数组"
    for(fast=0,slow=0;fast<numsSize-1;fast++){"快指针一往无前"
      if(nums[fast]!=nums[fast+1]){"判断是否是新的数字"
        slow++;
        nums[slow]=nums[fast+1];"slow每次只移动一格(每个数字只有一个嘛"
      }
    }
    return slow+1;
}

其他想法:每次都把新来的第一个元素放进去,slow和fast前后作比较 

 


移动零 

有了前几题的铺垫和双指针的背景,简单了很多。 

void moveZeroes(int* nums, int numsSize){
    int fast,slow;
    for(fast=0,slow=0;fast<numsSize;fast++)
        if(nums[fast]!=0)
            nums[slow++]=nums[fast];

    while(slow<numsSize)
        nums[slow++]=0;
}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值