[路飞]_leetcode-283-移动零

简介: leetcode-283-移动零

网络异常,图片无法展示
|


「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战


[题目地址][B站地址]


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


示例:


输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
复制代码


说明:


  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。


sort 排序


解题思路


这里我们首先可以想到借助 sort 来进行排序,a,b 总共有如下 4 种情况:


  1. a,b 都是 0
  2. a,b 都是 非0
  3. a0b非0
  4. a非0``,b0`


第 1,2 种情况,我们可以保持它们之前的相对位置,减少操作次数,


第 3,4 中则要保证 非 00 的前面。


代码实现


var moveZeroes = function (nums) {
  nums.sort((a, b) => {
    // 如果两个元素都是 非0 或者都是 0,保持相对位置不变,减小操作次数
    if ((a && b) || (a===0 && b===0)) return 0
    // 如果前面是 0 后面是 非0,返回 1,保证 非0 在前,0 在后
    if (a===0 && b) return 1
    // 如果前面是 非0 后面是 0,返回 -1,保证 非0 在前,0 在后
    return -1
  })
}
复制代码


交换位置


解题思路


本题我们还可以通过双指针交换元素方法解题。


定义指针 l 指向 0r 指向 非0 元素。


l 指向值为 0 的元素,r 指向值为 非0 的元素的时候,判断 l<r && r<len,如果条件成立,则此时找到了一组 0 前 非0 后 的情况,交换两个元素位置。


lr 继续向后查找,直到处理完输入数组,就完成了移动所有 0 到数组末尾的操作。


代码实现


var moveZeroes = function (nums) {
  const len = nums.length
  // l 指向 0,r 指向 非0
  let l = 0,
    r = 0
  // r 指针扫描整个数组
  while (r < len) {
    // l 向后找到为 0 的元素
    while (l < len && nums[l] !== 0) l++
    // r 向后找到 非0 的元素
    while (r < len && nums[r] === 0) r++
    // 如果当前 l<r(即 0 前 非0 后),并且 r 合法,交换两元素位置
    if (l < r && r < len) {
      ;[nums[l], nums[r]] = [nums[r], nums[l]]
    }
    // 向后移动 r 查找新的 非0 元素
    r++
  }
}
复制代码


至此我们就完成了 leetcode-283-移动零


如有任何问题或建议,欢迎留言讨论!👏🏻👏🏻👏🏻

相关文章
|
存储 移动开发 weex
Flutter 新一代图形渲染器 Impeller
Flutter 新一代图形渲染器 Impeller
886 0
|
iOS开发
如何获取 iOS 设备 UDID
什么是 UDID? UDID 是由子母和数字组成的 40 个字符串的序号,用来区别每一个唯一的 iOS 设备。 例如: 37f2f993bae681636e30e74b04d6b8955ba36f29 获取UDID 方法一 手机连接电脑,打开iTunes,即可查看。
2150 0
|
自然语言处理 文字识别 计算机视觉
字节团队提出猞猁Lynx模型:多模态LLMs理解认知生成类榜单SoTA
字节团队提出猞猁Lynx模型:多模态LLMs理解认知生成类榜单SoTA
224 0
|
开发框架 Windows
解决Electron在Windows 7下出现电脑白屏的方法
Electron是一种跨平台的桌面应用程序开发框架,但在Windows 7操作系统中,有时候可能会遇到Electron应用程序出现白屏的问题。本文将介绍两种常见的情况,并提供相应的解决方法,帮助您解决Electron在Windows 7下出现电脑白屏的问题。
1582 0
解决Electron在Windows 7下出现电脑白屏的方法
|
机器学习/深度学习 存储 开发框架
解密淘宝推荐实战,打造 “比你还懂你” 的个性化APP
如今,推荐系统已经成为各大电商平台的重要流量入口,谁才能够做到比用户更懂用户,谁占据了新零售时代的主动权。手机淘宝的推荐更是淘宝最大的流量入口和最大的成交渠道之一,其背后是最为复杂的业务形态和最复杂的场景技术,那么究竟如何打造手淘背后的推荐系统呢?本次首席技术官大数据专享会上,阿里巴巴搜索推荐事业部资深算法专家欧文武(三桐)为大家解密了淘宝的推荐实战。
11115 1
解密淘宝推荐实战,打造 “比你还懂你” 的个性化APP
|
9月前
|
算法
数据结构 | 堆【图解】
数据结构 | 堆【图解】
|
存储 算法
数据结构之单链表一生的历程(创建一个线性表,动态分布空间,单链表创建的思路,单链表的增、删、改、毁)
数据结构之单链表一生的历程(创建一个线性表,动态分布空间,单链表创建的思路,单链表的增、删、改、毁)
111 0
|
3天前
|
人工智能 自然语言处理 Shell
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
仅用3分钟,百炼调用满血版Deepseek-r1 API,享受百万免费Token。阿里云提供零门槛、快速部署的解决方案,支持云控制台和Cloud Shell两种方式,操作简便。Deepseek-r1满血版在推理能力上表现出色,尤其擅长数学、代码和自然语言处理任务,使用过程中无卡顿,体验丝滑。结合Chatbox工具,用户可轻松掌控模型,提升工作效率。阿里云大模型服务平台百炼不仅速度快,还确保数据安全,值得信赖。
157109 24
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。

热门文章

最新文章