天天看點

LeetCode 1051. 高度檢查器

題目

學校在拍年度紀念照時,一般要求學生按照 非遞減 的高度順序排列。

請你傳回能讓所有學生以 非遞減 高度排列的最小必要移動人數。

注意,當一組學生被選中時,他們之間可以以任何可能的方式重新排序,而未被選中的學生應該保持不動。

示例:

輸入:heights = [1,1,4,2,1,3]
輸出:3 
解釋:
目前數組:[1,1,4,2,1,3]
目标數組:[1,1,1,2,3,4]
在下标 2 處(從 0 開始計數)出現 4 vs 1 ,是以我們必須移動這名學生。
在下标 4 處(從 0 開始計數)出現 1 vs 3 ,是以我們必須移動這名學生。
在下标 5 處(從 0 開始計數)出現 3 vs 4 ,是以我們必須移動這名學生。
示例 2:

輸入:heights = [5,1,2,3,4]
輸出:5
示例 3:

輸入:heights = [1,2,3,4,5]
輸出:0           

提示:

1 <= heights.length <= 100

1 <= heights[i] <= 100

解題思路

class Solution:
    def heightChecker(self, heights: [int]) -> int:
        temList = sorted(heights)
        ret = 0
        for i in range(len(heights)):
            #替換次數,其實就是每個原來位置不一樣的數值都要換一次,是以替換次數=同位置不同值的次數
            if heights[i] != temList[i]:
                ret += 1
        return ret           

繼續閱讀