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

力扣算法题——283.移动零【系统讲解】

目录

 💕1.题目

 💕2.解析 

 💕3.代码实现

 💕4.完结


 二十七步也能走完逆流河吗 


 💕1.题目

我们先看题目要求


 💕2.解析 

本题可以分为数组划分类型的题目,因为它需要一边是0,另一边是非0,因此,本题的区间范围可以规划成这样,cur表示快指针,用来遍历数组,des表示目标指针,也就是慢指针,用来表示已经进行处理的记录点


根据题目,我们可以将整个数组分为三块区域

[0,des]表示非0区,[des+1,cur-1]表示0区,[cur,n-1]表示待处理处,保持每一个都是闭区间,方便循环的书写,同时只要保持每一次都是这个区间,这样直到待处理区域消失,就可以保证题目的正确


最开始我们可以记录des为-1,cur为0,因为des可以划分非0区,而刚开始没有被处理的内容,也就是没有非0区就是-1,cur设为0说明全是待处理区域,逻辑上也合理


在处理区域时,我们以用例为例子,数组【0,1,0,3,12】或者【1,3,0,0,12】

当cur遇到0,因为des右边的范围全为0区,所以des不需要动进行静等,因为它本身就位于des右边的区域。

而这个0已经被cur处理过了,待处理区改变了,所以cur需要移动一位,来表示处理了一个单位


当cur遇到非0时,说明des的非0区要增加,所以des先向右1位位置占住,然后与cur进行交换,交换后意味着处理好了,处理好了后cur就需要向右1位更改待处理区


以上的每次都没有改变区间的完整性


 💕3.代码实现

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int cur = 0;
        int des = -1;
        while(cur<=nums.size()-1)
        {
            if(nums[cur]!=0)
            {
                des+=1;
                swap(nums[des],nums[cur]);
                cur+=1;
            }else
            {
                cur+=1;
            }
        }

    }
};


 💕4.完结


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

相关文章:

  • Kotlin开发(三):编程趣事,变量、判断和循环的三角恋
  • C++ 复习总结记录十
  • transformers报错:‘GenerationConfig‘ object has no attribute ‘_eos_token_tensor‘
  • INCOSE需求编写指南-第1部分:介绍
  • 基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】
  • 【GO】Context
  • 亚博microros小车-原生ubuntu支持系列:11手指控制与手势识别
  • 活动回顾和预告|微软开发者社区 Code Without Barriers 上海站首场活动成功举办!
  • Queries Acceleration -Tuning- Tuning Execution 学习笔记
  • 在Android中通过JNI实现Java与C++的交互:Hello World示例
  • C++中static和const的区别和用法
  • leetcode——相交链表(java)
  • Spring Boot - 数据库集成02 - 集成JPA
  • DSP实验七 综合实验与考查
  • 数据库之PostgreSQL详解
  • 构建基于知识图谱的语义化问答系统
  • ray.rllib 入门实践-2:配置算法
  • Lua 初级教程
  • Android BitmapShader简洁实现马赛克,Kotlin(二)
  • Java设计模式 三十 状态模式 + 策略模式