题目:0,1,2代表三种颜色,不采用sort函数进行排序。
分析:
传统的选择排序方法可以完成,复杂度为n2n2。本题目只有三种元素,因此应该有复杂度更低的算法。
核心思想:
进行一次遍历,如果是0,则往前移动,如果是2则往后。
python代码
class Solution(object):
def sortColors(self,nums):
start=0
end=len(nums)-1
ii=0
while ii<=end:
if nums[ii]==0:
nums[ii]=nums[start]
nums[start]=0
start+=1
if nums[ii]==2:
nums[ii]=nums[end]
nums[end]=2
end-=1
ii-=1
ii+=1
在循环过程中,如果遇到元素等于2的情况,由于数字从end位置调换过来,因此需要再对该位置的数字进行判断,因此有ii-=1这一情况。也可以将对ii==0的判断放在后面。
class Solution(object):
def sortColors(self, nums):
start=0
end=len(nums)-1
i=0
while i<=end:
while (nums[i]==2 and i<=end):
nums[i]=nums[end]
nums[end]=2
end-=1
while (nums[i]==0 and i>=start):
nums[i]=nums[start]
nums[start]=0
start+=1
i+=1