该题不需要返回值为题目设置,如果设置返回值或者全局变量,都会导致运行出来的结果和本地浏览器运行出的结果不一致
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
解法一:
const moveZeroes = function(nums) {
let i = 0 //循环的数组下标,如果一个元素为0 ,这个元素走了,下一个元素顶上,数组下标是不变的,所以单独设置一个变量控制数组下标
for( let j = 0 ;j < nums.length ;j ++){
if(nums[i] == 0){
nums.splice(i,1)
nums.push(0)
}else{
i++
}
}
};
执行用时:312 ms 执行时间太长
内存消耗:45.8 MB
主要思路是扫到0就删掉,然后在最后补一个0
解法二:
var moveZeroes = function(nums) {
nums.sort((a,b)=>{
if(a == 0){
return 1 //返回值>0 b放a前面
}else if(b == 0){
return -1
}
})
};
执行用时: 80 ms
内存消耗: 45.2 MB
- 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
- 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
- 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前