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

【二刷力扣】【力扣热题100】今天的题目是:283.移动零

题目:

给定一个数组 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

解答:

思路:

首先我想到的就是swap进行交换,因为数组元素的顺序不能改变,只能让零移动全部到后面。

换个想法,其实就是想让非零元素全部按原来的顺序全部排列在数组前,那么就可以直接一个for循环遍历,只要是非零元素就进行swap,遍历一遍就会将非零元素置换到前面。

元素是零,就会用res标记下标,与下一个非零元素进行swap,这样遍历一遍,零元素会慢慢全部排序在后面,非零元素排列在前面。

代码如下:

class Solution {
public:void moveZeroes(vector<int>& nums) {int res=0;for(auto & it : nums){if(it!=0){          //如果数组中,当前元素不为0,就和后一个元素交换swap(it,nums[res]);res++;}}}
};
// 0 1 0 3 12 res=0 
// 1 0 0 3 12 res=1 
// 1 3 0 0 12 res=2 
// 1 3 0 0 12 res=3 
// 1 3 12 0 0 res=4 

相关文章:

  • 2025.5.22 Axure 基础与线框图制作学习笔记
  • 大数据Spark(六十):Spark On Yarn 配置
  • 软件工程重点复习
  • C++学习之打车软件—高德地图API
  • 图解 | 大模型智能体LLM Agents
  • 网络原理入门详解:从零理解互联网如何工作
  • mysql知识点1--了解数据库
  • c/c++的opencv椒盐噪声
  • 学习日志12 java
  • 【IPMV】图像处理与机器视觉:Lec12 Blob Detector 斑点检测
  • MLA:Transformer的智能变形金刚——解密多头潜在注意力的进化密码
  • DOM事件的传播机制
  • Dify 本地源码安装教程
  • Llama 4中文调优全流程解
  • Win11 系统登入时绑定微软邮箱导致用户名欠缺
  • ST表——算法的优化
  • LambdaQueryWrapper、MybatisPlus提供的基本接口方法、增删改查常用的接口方法、自定义 SQL
  • QML学习06Button
  • ArrayList 与 LinkedList 区别?
  • CMake学习笔记(六)可以在CMake的function中修改function函数体之外的变量值吗?
  • 做兼职的网站打字员/石家庄百度搜索优化
  • 吃的网站要怎么做/如何找做网站的公司
  • 房山区网站建设/郑州seo排名哪有
  • 沈阳做平板网站/今天新闻头条新闻
  • r2网站做生存分析/网上怎么推广产品
  • 广东人才网官方网站招聘信息/国外网站如何搭建网页