給定乙個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。
注意:1. cur 遍歷到0時,與left指標交換值,cur+=1, left+=1
2. cur 遍歷到1時, 不管它,直接cur+=1, 因為交換了0與2最後1會自動在中間
3. cur 遍歷到2時, 交換cur與right指標的值,right-=1,這裡cur不動,因為需要再判斷交換過來的cur的值
class solution:
def sortcolors(self, nums: list[int]) -> none:
"""do not return anything, modify nums in-place instead.
"""right_boundary_of_0 = 0
left_boundary_of_2 = len(nums) - 1
i = 0
while i <= left_boundary_of_2:
if nums[i] == 0:
middlevalue = nums[right_boundary_of_0]
nums[right_boundary_of_0] = 0
nums[i] = middlevalue
right_boundary_of_0+=1 ******************1
i+=1 ******************1
elif nums[i] == 2:
middlevalue = nums[left_boundary_of_2]
nums[left_boundary_of_2] = nums[i]
nums[i] = middlevalue
left_boundary_of_2 -=1
else:
i+=1
print(i,right_boundary_of_0,left_boundary_of_2,nums)
解決原地問題的思路:
1.三指標,0的有邊界,2的左邊界,當前遍歷值,while cur <= right_boundary_of_2:
2.**中標記的兩行,只有在與左邊0呼喚之後,才會 i++ ,因為換過去的是0,就達到了把0放在左邊的目的。
其實這裡我還是沒想太明白,以後再想把
leetcode 75 顏色分類
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...
leetcode75 顏色分類
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...
leetcode75 顏色分類
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...