75 顏色分類 leetcode

2022-07-01 00:51:10 字數 1311 閱讀 8117

給定乙個包含紅色、白色和藍色,一共 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,...