1.第一题:
这一道题叫三色旗问题,我一开始想的是遍历数组,是0就插到表头,是2就插到表尾,1就pass,然后看了一下官方题解,维护0的右侧节点和2的左侧节点,若curr(表示当前正在遍历的值的下标)指向的值为0则交换nums[p0]和nums[curr],且p0+1,curr+1;若curr指向的值为2则交换nums[p2]和nums[curr],且p2-1,若nums[curr]=1则curr+1,一直到curr>p2.代码如下:
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
p0=0
p2=len(nums)-1
curr=0
while curr<=p2:
if nums[curr]==0:
demo=nums[p0]
nums[p0]=nums[curr]
nums[curr]=demo
curr+=1
p0+=1
elif nums[curr]==2:
demo=nums[p2]
nums[p2]=nums[curr]
nums[curr]=demo
p2-=1
else:
curr+=1