这道题是也是我在面试的过程中碰到的一个原题,这里写一下解法。
题目描述是这样的, 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例: |
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
初次看,是想新开一个数组,然后把所有的零丢到最后,但是这样不满足题目中给定的要求。
或者用哈希表把0元素存储起来,然后再把元素丢到后面。但是这样同样需要新开一个数组,需要的空间复杂度为O(n).
最佳解法,双指针,解题思路可以选择在数组中用指针进行数组的index交换。其中一个数组必须指向第一个index,另外一个数组从零开始进行遍历,如果在首端的指针碰到了零,那么就选择与末端的指针索引对应的数进行交换。
nums=[1,1,3,4,0,0,2] |
var movezeros=function(nums){ |