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

Leetcode热题——移动零

一,题目

https://leetcode.cn/problems/move-zeroes/submissions/594915685

其实就是考察随机快排那部分知识点。

二,答案

1,逐个交换(类似冒泡法)

准备两个函数,一个负责交换向量元素位置,一个负责将非零元素向前移动(最初我是想将0往后移,发现如果在移动过程中遇到0有点麻烦,所以转换思路改为移动非零元素)

代码

class Solution {
public:
    void swap(int& a,int& b)
    {
        int x = a;
        a = b;
        b = x;
    }

    void moveHead(vector<int>& nums,int i)
    {
        while(i >= 1)
        {
            if(nums[i - 1])break;
            else swap(nums[i - 1],nums[i--]);
        }
    }
    void moveZeroes(vector<int>& nums)
    {
        for(int i = 0;i < nums.size();i++)
        {
            if(nums[i]) moveHead(nums,i);
        }
    }
};

效果

2,双指针

我的思路是直接赋值将非零数拷贝到向量前面,记录0的个数,最后将最后几个全部变为0就行了。

代码

class Solution {
public:
    void moveZeroes(vector<int>& nums)
    {
        int count = 0;
        int first = 0;
        int index = 0;
        int len = nums.size();
        while(index < len)
        {
            if(nums[index]) nums[first++] = nums[index];
            else count++;
            index++;
        }

        for(int i = 1;i <= count;i++)
        {
            nums[len - count - 1 + i] = 0;
        }
    }
};

效果

3,标准答案

class Solution 
{
public:
    void moveZeroes(vector<int>& nums) 
    {
        // 方法二 : 前后指针的快排思想
        int prv = -1, cur = 0;
        while (cur < nums.size())
        {
            if(nums[cur] != 0)
            {
                swap(nums[++prv], nums[cur]);
            }
            cur++;
        }
    }
};


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

相关文章:

  • 工业数据分析:解锁工厂数字化的潜力
  • SQL基础、函数、约束(MySQL第二期)
  • Flink把kafa数据写入Doris的N种方法及对比。
  • 【fly-iot飞凡物联】(20):2025年总体规划,把物联网整套技术方案和实现并落地,完成项目开发和课程录制。
  • 页高速缓存与缓冲区缓存的应用差异
  • 【机器学习】穷理至极,观微知著:微积分的哲思之旅与算法之道
  • [STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统
  • ELK环境搭建
  • 在K8S中,如果后端NFS存储的IP发送变化如何解决?
  • 一个vue项目npm install失败的问题解决方案
  • 后端学习路线
  • Linux系统 C/C++编程基础——基于Qt的图形用户界面编程
  • +-*/运算符优先级计算模板
  • 数学大模型MAmmoTH:通过混合说明调整建立数学通才模型
  • 浏览器默认语言与页面访问统计问题二三则
  • 网络知识小科普--5
  • 题海拾贝:力扣 622.设计循环队列
  • 后端面试题分享第一弹(状态码、进程线程、TCPUDP)
  • Midscene.js:重新定义UI自动化的新时代工具
  • 新版IDEA创建数据库表
  • PCIE模式配置
  • Elasticsearch 性能测试工具 Loadgen 之 002——命令行及参数详解
  • web端ActiveMq测试工具
  • AI Agent的规划系统:让Agent更智能地完成任务
  • Spring--SpringMVC使用(接收和响应数据、RESTFul风格设计、其他扩展)
  • 2、ceph的安装——方式二ceph-deploy