当前位置: 首页 > article >正文

【C++习题】2.双指针_移动零

文章目录

    • 题目链接:
    • 题目描述:
    • 解法(快排的思想:数组划分区间 - 数组分两块):
    • C++ 算法代码:
    • 图解


题目链接:

283.移动零


题目描述:

8ae324a8c2586aec8c1d8dd5879035e8


解法(快排的思想:数组划分区间 - 数组分两块):

双指针算法,利用数组下标充当指针。

我们可以用一个 cur 指针来扫描整个数组,另一个 dest 指针用来记录非零数序列的最后一个位置。根据 cur 在扫描的过程中,遇到的不同情况,分类处理,实现数组的划分。

cur 遍历期间,使 [0, dest] 的元素全部都是非零元素, [dest + 1, cur - 1] 的元素全是零。

127e769b240c2db89634662a2a181c02

遇到0元素:

cur++

遇到非0元素:

swap(dest+1, cur)

dest++, cur++


C++ 算法代码:

class Solution 
{
public:
    void moveZeroes(vector<int>& nums) 
    {
        for(int cur = 0, dest = -1; cur < nums.size(); cur++)
            if(nums[cur]) // 处理非零元素nums[cur]!=0
                swap(nums[++dest], nums[cur]);
    }
};

如果遇到0元素,cur++。也就是for(int cur = 0, dest = -1; cur < nums.size(); cur++)的末尾那句。

如果遇到非0元素,先swap(dest+1, cur)然后dest++, cur++。这里合并为 swap(nums[++dest], nums[cur]);


图解

  1. 开始:

d982048a769acad16bdca6c46649f308

  1. nums[cur]=0,不进入if条件,cur++

21842c468e1c458409b958b969586c08

  1. nums[cur]=1,进入if条件,交换++destcur位置的元素

9823e1d8ede2d6afa055aa794ace2869

  1. 然后cur++

4dcb2c872a675d23093405db3ec5ff33

  1. nums[cur]=0,不进入if条件,cur++

6d360d2972bbf066fb91bc68fad97457

  1. nums[cur]=3,进入if条件,交换++destcur位置的元素

4ae4908e4dd93655f2a980dcf389a133

  1. 然后cur++

8b807164ad280716ef2b916f1b8d374a

  1. nums[cur]=12,进入if条件,交换++destcur位置的元素

bbaa80e08655051b5389fac802a1f0bb

  1. 然后cur++

    不满足cur < nums.size();跳出循环


http://www.kler.cn/a/320880.html

相关文章:

  • Neo4j Desktop 和 Neo4j Community Edition 区别
  • redis和mongodb等对比分析
  • 单元测试、集成测试、系统测试、验收测试、压力测试、性能测试、安全性测试、兼容性测试、回归测试(超详细的分类介绍及教学)
  • ServletConfig、ServletContext、HttpServletRequest与HttpServletResponse常见API
  • Linux运维常用命令
  • 蓝桥杯每日真题 - 第14天
  • Rapid品牌SSL证书通配符单域名申请窍门
  • [笔记]数据结构
  • selenium模块的基本使用
  • 【Elasticsearch系列廿二】特殊参数
  • 【openwrt-21.02】openwrt PPTP Passthrough 不生效问题解决方案
  • Delphi5利用DLL实现窗体的重用
  • Vue 响应式监听 Watch 最佳实践
  • C++:STL详解(二)string类的模拟实现
  • 《python语言程序设计》2018版第8章18题几何circle2D类(下部)
  • 2024准备去面试软件测试岗,高频面试题预测?
  • yarn : 无法加载文件 C:\Users\Rog\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本
  • 深入浅出 AbstractQueuedSynchronizer (AQS)
  • SpringCloudEureka简介
  • Qt | linux+openCV+Qt6.5.3环境搭建成功版(带例子)
  • 网络高级day03(Http)
  • 短信视频评论dy版提取,免COOKIE 手机版本介绍说明
  • 前端中CSS选择器权重的问题
  • AccessClient在MacOS14 (sonoma)闪退无法调用远程桌面
  • Ubuntu上如何优雅下载huggingface上某个gguf模型文件
  • 【HarmonyOS鸿蒙应用开发者高级认证争议题】以下关于Taskpool和Worker的描述正确的是