力扣——283.移动零
一、题目描述
二、解题思路
本题需要我们将数组中所有的0都i移动到数组的最后面,并且保证原数组非零值顺序不变,我们可以使用双指针(快慢指针)的方法进行解题:首先保证快慢指针初始先指向首元素,在快指针未指向数组最后一个元素前,如果快指针指向的元素不是零则交换快慢指针指向的元素,并将慢指针指向下一个元素,否则将快指针指向下一个元素,这样就可以实现移动0。
三、代码实现(python)
class Solution(object):
def moveZeroes(self, nums):
n = len(nums)
left = right = 0
while right < n :
if nums[right] != 0:
temp = nums[left]
nums[left] = nums[right]
nums[right] = temp
left += 1
right += 1
四、复杂度分析
时间复杂度:O(n),每一个元素都最多被访问两次
空间复杂度:O(1),使用了常数空间的内存(temp)