数组里的零全部移动到后面,其余数字顺序保持不变
双指针的两种方法
方法一:时间复杂度logN,空间复杂度1
nums = [1,2,0,5,7,0] low = 0 # 指向非零部分的最后一个位置 fast = 0 # 遍历列表元素 n = len(nums) while fast < n: # 走一遍,原始空间上已经存有非零数字 if nums[fast]!=0: # 遇到非零元素将其存到nums对应low位置,同时low指向一下位置 nums[low]=nums[fast] low += 1 fast += 1 while low < n: # 后半部分补零 nums[low]=0 low += 1 nums
方法二:零和非零元素互换
nums = [1,2,0,5,7,0] low, fast = -1, 0 # low记录非零元素的最后一个位置,fast记录不是零元素位置和low+1位置元素互换 n = len(nums) while fast<n: # 走一遍, if nums[fast]!=0: low += 1 nums[low], nums[fast] = nums[fast], nums[low] fast += 1 nums
时刻记着自己要成为什么样的人!