defmoveZeroes(nums): index = 0 for i inrange(len(nums)): if nums[i] != 0: nums[index] = nums[i] index+=1 while index < len(nums): nums[index] = 0 index+=1
defpartition(nums, start, end): if start == end: return end i = start j = end x = nums[i] while i < j: while i<j and nums[j]>x: # 找到右边小于等于x的数 j-=1 if i<j: nums[i] = nums[j] # nums[j]去到了i这个位置,j这个位置的数可以被覆盖了 i+=1 while i<j and nums[i]<x: # 找到左边大于等于x的数 i+=1 if i<j: nums[j] = nums[i] # nums[i]去到了j这个位置,i这个位置的数可以被覆盖了 j-=1 nums[i]=x # 最后覆盖i这个位置 return i
思路2 给位置找到合适的数
从左边开始,给位置找到合适的数.
1 2 3 4 5 6 7 8 9 10
defpartition(nums, start, end): if start == end: return end x = nums[end] index = start for i inrange(start,end): # 最后一个不用 if nums[i] <= x: nums[i], nums[index] = nums[index], nums[i] index+=1 nums[index], nums[end] = nums[end],nums[index] # 这里处理最后一个 return index