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

移动零

一 :题目

二:思路

双指针法:

两个指针将数组划分成三个部分:

解释:

①:所以一开始dest要等于-1,因为没有非零的元素,cur=0,因为要从头开始遍历数组

②:cur为0,则不管,自己++

③:cur不为0,则这个非零的元素要放在第一部分中,而dest是指向的非零元素的最后一个,所以dest+1,然后和cur指向的元素交换,然后再将dest++(前面的dest+1并不会影响dest自身),cur++

三:代码实现

①:易懂写法

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int cur = 0;
        int dest =-1;

        for(;cur<nums.size();cur++)
        {
            if(nums[cur]!=0)//对非零元素处理
            {
                swap(nums[cur],nums[dest+1]);
                dest++;
            }
        }        
    }
};

解释:

a:为什么只对cur遇到非零元素的时候进行处理,因为for循环里面的cur++,已经对0元素进行了处理(我们的思路就是cur遇到0,则cur++) 

b:为什么dest还要++,因为dest+1不会影响自身

 ②:精简写法

class Solution {
public:
    void moveZeroes(vector<int>& nums) {

        for( int dest = -1,cur = 0;cur<nums.size();cur++)
        {
            if(nums[cur]!=0)
            {
                swap(nums[cur],nums[++dest]);
            }
        }        
    }
};

解释:

a:++dest,综合了dest+1和cur交换,然后dest++这两步 

 

 题目网址:283. 移动零 - 力扣(LeetCode)

相关文章:

  • centos 下dockers部署surveyking-docker开源考试系统
  • 【数据结构与算法】Java描述:第一节:ArrayList顺序表
  • 使用watch监听route对象的变化
  • 【面试题】高并发场景下如何实现积分排行榜
  • R 语言科研绘图 --- 箱线图-汇总
  • 配置后端验证功能之validation
  • C++基础语法9——函数结构
  • Kotlin 5种单例模式
  • 了解什么是红黑树
  • 通过查询hive的元数据库中的表分区清单,拼写出来删除表分区的sql脚本
  • uniapp 中引入使用uView UI
  • PH热榜 | 2025-03-02
  • Sparsely-Gated Mixture-of-Experts Layer (MoE)论文解读与Pytorch代码实现
  • 大数据-236 离线数仓 - 会员活跃度 WDS 与 ADS 导出到 MySQL 与 广告业务 需求分析
  • 开启mysql的binlog日志
  • 【网络安全 | 渗透测试】GraphQL精讲一:基础知识
  • 高频 SQL 50 题(基础版)_1174. 即时食物配送 II
  • 随机播放音乐 伪随机
  • tin这个单词怎么记
  • 【沙漠之心:揭秘尘封奇迹的终极之旅】
  • 高要网站制作/深圳排名seo
  • 找人做网站要注意什么/推广联盟平台
  • 日本做a的图片视频在线观看网站/重庆seo优化效果好
  • 西安公司企业网站建设/今日新闻热点
  • 大型集团网站/商品推广软文范例300字
  • 哪个网站建设商招代理/哪家网络推广好