JS_LeetCode04:移动零
4.移动零
给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
双指针
属于一种算法技巧,使用两个变量(指针)来同时在一个数组或者字符串上操作,达到高效解决问题的目的。
在这道题,使用快指针去遍历数组,慢指针负责做非零区域的边界,也就是指向最后一个非零数的下一个位置,准备存放新的非零数。这样的话,快指针找到了非零的数,就可以直接与慢指针交换数据。还可以使用复制,将快指针找到的非零数据复制给慢指针,最后把慢指针后面的数字都置为0就可以了。
? 为什么不能遍历分开存放非零和零的数组
题目要求不能复制数组!
双指针在原地操作,不额外申请空间,而且每个元素最多处理一次,效率高!
解答
1 |
|