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

力扣-移动零

移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]

class Solution {public void moveZeroes(int[] nums) {// 获取数组长度int n = nums.length;// 左指针:指向当前已经处理好的非零元素的下一个位置(即下一个非零元素应该放置的位置)int left = 0;// 右指针:用于遍历数组,寻找非零元素int right = 0;// 遍历整个数组while (right < n) {// 当右指针找到非零元素时if (nums[right] != 0) {// 将右指针找到的非零元素与左指针位置的元素交换// (左指针位置可能是0,也可能是已处理过的非零元素,交换后非零元素被移到左侧)swap(nums, left, right);// 左指针右移,指向新的待填充位置left++;}// 无论是否找到非零元素,右指针都右移继续遍历right++;}}/*** 交换数组中两个位置的元素* @param nums 数组* @param left 要交换的第一个位置* @param right 要交换的第二个位置*/public void swap(int[] nums, int left, int right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;}
}

思路及解法
使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。
右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。
注意到以下性质:
1.左指针左边均为非零数;
2.右指针左边直到左指针处均为零。
因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。

http://www.dtcms.com/a/537888.html

相关文章:

  • 如何通过7种简单方法将小米手机数据传输到电脑
  • wap网站编辑器英文版网站建站要求
  • 网站设计和策划的步骤是什么东莞公司网站建设教程
  • 数学分析简明教程课后习题详解——1.1
  • Linux下编译lib-artnet-4-cpp
  • 哪些网站适合做外贸网站推广apm安装wordpress网页无法访问
  • 网站建设所有软件清单苏州制作手机网站
  • 免费的舆情网站不需下载有没有免费的网站推销产品
  • 搭建网站商城去哪个网站可以做写手
  • 【Python刷力扣hot100】42. Trapping Rain Water
  • 吉林建设厅官方网站科技部网站建设合同范本
  • 提示词设计
  • 如何进行高效搜索(ripgrep)?
  • 项目网络网站优化协议
  • 长沙需要做网站的企业浙江省建设信息港网
  • 2025残保金申报进入最后“窗口期”!各地征收截止日期明确,逾期后果很严重
  • 德州手机网站建设做代销的网站
  • 怎么用新浪云做网站在建设银行网站上买卖贵金属
  • uni-app Google登录
  • Linux进程:进程地址空间(一)
  • 详解 TCP 通信中的序列化与反序列化:从登录场景谈起
  • 注册会计师协会成都网站搜索排名优化哪家好
  • C# 中的 DateTime.Now.ToString() 方法支持多种预定义的格式字符
  • Three.js 实现 3d 面积图
  • QtQuick3D入门(4):天空盒
  • 自己做网站要不要租服务器做的比较好的p2p网站
  • 动态规划算法
  • ABAP_FICO替代不生效问题解决
  • seo sem论坛已有的网站如何做排名优化
  • python 网站架构做外发的网站