题目描述

283. 移动零

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

示例:

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

说明:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/move-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答:

解答1:

个人思路:

从尾到头,依次判断,元素是否为 0 ,如果是,并且右边也有不为 0 元素,则该元素与右边元素交换位置,i 移到交换后的位置。

164 ms

/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
for(let i = nums.length; i>=0; i--){
if (nums[i]===0 && nums[i+1] && nums[i+1]!==0){
[nums[i],nums[i+1]] = [nums[i+1],nums[i]]
i+=2
}
}
};

解答2:

已有的最快的解答:56ms

两个指针,一个start指向0,一个end指向length-1;

循环,start小于end的时候,如果start这个index的元素是 0 ,则将这个元素删掉,尾巴上push进一个 0 ,end左移(end--);

如果start这个index的元素不是 0,start++,继续判断……

const moveZeroes = nums => {
const max = nums.length let start = 0
let end = max - 1 while (start < end) {
const item = nums[start]
if (item === 0) {
nums.splice(start, 1)
nums.push(0)
end--
continue
}
start++
} return nums
}

解答3:

用for循环实现类似解答2的思路。96ms

Ps:最早我的解答里,for循环里使用的条件是 i<nums.length,这样会导致多循环后面好多个无用的0,导致超时,引入动态的end即可解决此问题。

var moveZeroes = function(nums) {
let end = nums.length
for(let i = 0; i<end; i++){
if(nums[i]===0){
nums.splice(i,1)
nums.push(0)
i--
end--
}
}
};

最新文章

  1. Oracle 和 SqlServer 的区别
  2. java.util.NoSuchElementException: Timeout waiting for idle object
  3. ASP.NET MVC中使用Unity Ioc Container
  4. Jquery ui widget开发
  5. Hadoop Pig简介、安装、试用
  6. Linq------各种查询语句大全
  7. 以16进制打印出一块内存buff
  8. ie6,ie7兼容性总结(转)
  9. c# 隐藏 控制台应用程序
  10. java 倒序输出
  11. SQL千万级数据设计和优化
  12. linux 安装mysql后修改密码出现问题
  13. jquery删除动态增加的li
  14. android jsonarray
  15. [HNOI 2013]数列
  16. Sping 里面的适配器模式的实现
  17. hackbar增强版 &amp; 在Firefox上安装未通过验证的扩展
  18. 快速部署Apache服务静态网站
  19. phothoshop 快捷键
  20. 力扣(LeetCode)7.整数反转

热门文章

  1. [Python[CV2]] -- 352: error -- 来自截取图片
  2. 【VS开发】【CUDA开发】如何在MFC中调用CUDA
  3. c#窗体程序绘制简单心形
  4. Redis set集合的使用
  5. 采用霍夫曼编码(Huffman)画出字符串各字符编码的过程并求出各字符编码 --多媒体技术与应用
  6. Linux 时间以及时间间隔的简单处理.
  7. SC创建服务编写bat脚本
  8. kibana发音 logstash发音 ElasticSearch发音 音标 翻译
  9. 20191011-构建我们公司自己的自动化接口测试框架-Util的ClearData模块
  10. redis用法分析