LeetCode-283. 移动零【数组,双指针】

2023-11-18

题目描述:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

提示:

1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1

进阶:你能尽量减少完成的操作次数吗?
https://leetcode.cn/problems/move-zeroes/

解题思路一:首先想到的是双指针,但是不行,非零元素的位置会改变。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n=nums.size();
        for(int i=0,j=n-1;i<j;++i){
            if(nums[i]==0){
                int temp=0;
                while(nums[j]==0) --j;
                temp=nums[j];
                nums[j]=nums[i];
                nums[i]=temp;
            }
        }  
    }
};

时间复杂度:O(n)
空间复杂度:O(1)

解题思路二:改进的是每次从当前0元素的位置取后面第一个非0元素替换过来。替换之和那个break非常重要!

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n=nums.size();
        for(int i=0;i<n;++i)
            if(nums[i]==0){
                int temp=0;
                for(int j=i;j<n;++j)
                    if(nums[j]!=0){
                        temp=nums[j];
                        nums[j]=nums[i];
                        nums[i]=temp;
                        break;//只替换一次
                    }          
            }
    }
};

时间复杂度:O(n2)
空间复杂度:O(1)

解题思路三:优化双指针,无论左指针是否为0元素,遇到非零元素直接交换即可。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n = nums.size(), left = 0, right = 0;
        while (right < n) {
            if (nums[right]) {
                swap(nums[left], nums[right]);
                left++;
            }
            right++;
        }
    }
};

时间复杂度:O(n)
空间复杂度:O(1)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode-283. 移动零【数组,双指针】 的相关文章

  • 浅谈归并排序:合并 K 个升序链表的归并解法

    在面试中遇到了这道题 如何实现多个升序链表的合并 这是 LeetCode 上的一道原题 题目具体如下 用归并实现合并 K 个升序链表 LeetCode 23 合并K个升序链表 给你一个链表数组 每个链表都已经按升序排列 请你将所有链表合并到
  • 工业异常检测AnomalyGPT-Demo试跑

    写在前面 如果你有大的cpu和gpu可以使用 直接根据官方的安装说明就可以 如果没有 可以点进来试着看一下我个人的安装经验 一 试跑环境 NVIDIA4090显卡24g cpu内存33G 交换空间8g 操作系统ubuntu22 04 试跑过
  • CCF模拟题 202309-2 坐标变换(其二)

    问题描述 试题编号 202309 2 试题名称 坐标变换 其二 时间限制 1 0s 内存限制 512 0MB 问题描述 对于平面直角坐标系上的坐标 x y 小 P 定义了如下两种操作 1 拉伸 k 倍 横坐标 x 变为 kx 纵坐标 y 变
  • 华为OD机试真题-求满足条件的最长子串的长度-2023年OD统一考试(C卷)

    题目描述 给定一个字符串 只包含字母和数字 按要求找出字符串中的最长 连续 子串的长度 字符串本身是其最长的子串 子串要求 1 只包含1个字母 a z A Z 其余必须是数字 2 字母可以在子串中的任意位置 如果找不到满足要求的子串 如全是
  • 扬帆证券:国债逆回购基础知识?

    国债逆回购基础知识 1 生意单位 沪深两商场的国债逆回购门槛为1000元 以1000的整数倍递增 最小改变金额为0 005元 2 生意费用 国债逆回购的手续费和佣金大约为0 001 0 030 有些证券公司最低收费规范为1元 即在每笔生意缺
  • J2EE常见面试题(一)

    StringBuilder和StringBuffer的区别 String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBuilder
  • 【C++入门】C++ STL中string常用函数用法总结

    目录 前言 1 string使用 2 string的常见构造 3 string类对象的访问及遍历 迭代器遍历 访问 4 string类对象的容量操作 4 1 size和length 4 2 clear empty和capacity 4 3
  • 排序:计数排序

    一 概念 计数排序是非比较排序 是对哈希直接定址法的变形应用 二 思想 利用数组统计相同数据出现的次数 例如整型数据m出现n次 就在数组m位置记录数据为n 最后从头遍历数组打印数据即可 通俗来讲就是 数组下标即为数据 下标所指位置的值即为数
  • 蒙特卡洛在发电系统中的应用(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 带头双向循环链表基础

    带头双向循环链表基础 销毁 销毁 void ListDestory ListNode phead void ListDestory ListNode phead assert phead ListNode cur phead gt next
  • 2024年华为OD机试真题-转盘寿司-Java-OD统一考试(C卷)

    题目描述 寿司店周年庆 正在举办优惠活动回馈新老客户 寿司转盘上总共有n盘寿司 prices i 是第i盘寿司的价格 如果客户选择了第i盘寿司 寿司店免费赠送客户距离第i盘寿司最近的下一盘寿司 j 前提是prices j lt prices
  • 基于卡尔曼的混合预编码技术用于多用户毫米波大规模MIMO系统研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 单向不带头链表的使用

    单向不带头链表的使用 链表的创建 typedef struct LNode SLDataType data struct LNode next LNode LinkList 按位查找 LNode GetElem LinkList L int
  • 做大模型也有1年多了,聊聊这段时间的感悟!

    自ChatGPT问世以来 做大模型也有1年多了 今天给大家分享这一年后的感悟 过去一年应该是AI圈最万千瞩目的一年了 大家对大模型 OpenAI ChatGPT AI Native Agent这些词投入了太多的关注 以至于有一年的时间好像经
  • 华为OD机试2024年最新题库(Java)

    我是一名软件开发培训机构老师 我的学生已经有上百人通过了华为OD机试 学生们每次考完试 会把题目拿出来一起交流分享 重要 2024年1月 5月 考的都是OD统一考试 C卷 题库已经整理好了 命中率95 以上 这个专栏使用 Java 解法 问
  • 「优选算法刷题」:快乐数

    一 题目 编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是 无限循环 但始终变不到 1 如果这个过程 结果为 1 那么这个
  • 【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 有 无策略奖励 2 2 训练结果1
  • 扬帆证券:A股高股息资产“画像”:连续数年跑赢大盘

    近期A股分红 大方 股息率较高的板块再次引起关注 走势显着强于同期大盘 并继续遭到商场追捧 有专家在接受证券时报记者采访时以为 近年A股商场高股息财物受捧背面 有多种要素在发挥作用 包含高股息财物本身具有的出资优势 微观经济布景 出资者心态
  • 2024年华为OD机试真题-虚拟游戏理财-Python-OD统一考试(C卷)

    题目描述 在一款虚拟游戏中生活 你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局 现有一家Bank 它提供有若干理财产品m 风险及投资回报不同 你有N 元 进行投资 能接受的总风险值为X 你要在可接受范围内选择最优的投资方式获得最大回报
  • 最大流-Dinic算法,原理详解,四大优化,详细代码

    文章目录 零 前言 一 概念回顾 可略过 1 1流网络 1 2流 1 3最大流 1 4残留网络 1 5增广路

随机推荐

  • C++ primer Plus 第十三章复习题

    1 派生类从基类哪里继承了什么 成员数据 还有一半的成员函数 公有成员和保护成员是可见得 私有成员不可见 2 派生类不能从基类哪里继承什么 构造函数 析构函数 赋值运算符 还有友元函数 都不能继承 3 假设baseDMA operator
  • 大数据毕业设计 深度学习股票预测系统 - python lstm

    文章目录 0 前言 1 课题意义 1 1 股票预测主流方法 2 什么是LSTM 2 1 循环神经网络 2 1 LSTM诞生 2 如何用LSTM做股票预测 2 1 算法构建流程 2 2 部分代码 3 实现效果 3 1 数据 3 2 预测结果
  • 什么是高内聚,低耦合?

    高内聚 低耦合是一个老生常谈的话题 所以拿出来说一下 我们在看Linux的一些资料 或者是在面试 又或者跟一个比较牛的大佬讨论技术的时候 可能会听到这个概念 所以 什么是高内聚 低耦合呢 高内聚 我们指的是认识的一群人或者一些东西分成的一类
  • 第一次从零到有开发项目

    在达内培训中 我们有项目峰会的活动 身为项目组长我组织了我的组员们从零到有进行了一个类CSDN的博客网站开发 目录 项目介绍 项目页面 总结 项目介绍 Kun吧 Kun吧是一个类csdn的学习技术社区 在这里可以交流学习技术 分享学习日常
  • 第十一届蓝桥杯C/C++回文日期

    include
  • 程序员转行做什么工作比较好?

    作为程序员来说 其实程序员的发展之路有多种 你可以结合自己的实际情况去做出相应的选择 程序员最基本的发展路线就是 从普通程序员做到熟练的开发者 接下来就会有多种选择 你可以选择做高级开发工程师 也可以成为一个一线熟练的开发人员 或者你也可以
  • Yolo v7的最简TensorFlow实现

    Yolo v7去年推出之后 取得了很好的性能 作者也公布了基于Pytorch实现的源代码 在我之前的几篇博客当中 对代码进行了深入的解析 了解了Yolo v7的技术细节和实现机制 因为我一直是用的Tensorflow 因此也想尝试把代码移植
  • c#数据结构转c++指针

    C string转c char C 使用IntPtr类型接受Marshal StringToHGlobalAnsi分配的内存 string sno 12345 IntPtr strsno Marshal StringToHGlobalAns
  • c++基础:循环练习案例展示

    1 猜数字 题目 系统随机生成一个1到100的数字 玩家进行猜测 如果猜错 提示玩家数字过大或过小 如果猜对恭喜玩家胜利 并且退出游戏 代码 include
  • Portainer -- Docker可视化管理工具

    http blog csdn net A632189007 article details 78779920 https portainer io install html https portainer readthedocs io en
  • vue3 computed

    前言 import computed from vue let aa computed gt 传回调函数 let aa computed 传对象 返回的类似一个ref包装的响应式对象 如果值是基本数据类型 需要 value进行拆箱 一 常规
  • Kaggle猫狗分类Pytorch CNN

    介绍 猫狗分类来源于Kaggle上的一个入门竞赛 https www kaggle com competitions dogs vs cats redux kernels edition overview 代码及解释 首先 导入一系列的库
  • python如何输出文字和变量_python中print怎么输出文字和变量

    本帖最后由 ButcherRabbit 于 2017 6 27 13 06 编辑 你说的知识点是 字符串拼接 n 3 print 还有多少 str n 机会 用加号拼接的话 记得拼接的元素必须同一个类型 如 还有多少 和 机会 属于字符串类
  • Cocos2dx-OpenGL ES2.0教程:编写自己的shader(2)

    在上篇文章中 我给大家介绍了如何在cocos2d x里面绘制一个三角形 当时我们使用的是cocos2d x引擎自带的shader和一些辅助函数 在本文中 我将演示一下如何编写自己的shader 同时 我们还会介绍VBO 顶点缓冲区对象 和V
  • 确知信号分析

    写在前面 现代通信原理是电子系的一门专业必修课 介绍了通信原理系统的基本概念 基本原理 基本技术以及设计和分析的方法 俗话说得好 实践出真知 要想学好这门课 必要的动手实践是必不可少的 实践是基于Matlab上实现仿真的 Matlab具有函
  • Access denied for user XX

    解决方法 将pom xml中的mysql connector java降低版本 直接去maven仓库复制 https mvnrepository com 比如
  • python+flask+mysql实现数据可视化

    准备工作 1 Python3 2 Echarts 下载地址 echarts 3 Flask 项目结构 创建DB 使用sqlite数据库 coding utf 8 author liudinglong software pycharm fil
  • 1.R语言基础知识

    目录 一 R语言的介绍 R语言的下载与按照 Rstudio R包的安装 工作空间管理 基本运算 二 R的数据结构 1 数据类型 2 数据类型的转换和判断 3 数据结构 三 导入 导出数据 获取内置数据集 获取其他格式的数据 四 数据框的常用
  • AI绘画指南:在CentOS7中安装Stable Diffusion WebUI

    一 安装GPU驱动 1 1 购买云服务器 在腾讯云选购一台GPU型的服务器 最好的境外的 境外的服务器后面关于镜像加速的步骤都可以跳过 购买成功之后腾讯的站内信会发送初始的密码给你 登录成功后会自动帮我们安装相关的驱动 提示整个过程大概需要
  • LeetCode-283. 移动零【数组,双指针】

    LeetCode 283 移动零 数组 双指针 题目描述 解题思路一 首先想到的是双指针 但是不行 非零元素的位置会改变 解题思路二 改进的是每次从当前0元素的位置取后面第一个非0元素替换过来 替换之和那个break非常重要 解题思路三 优