Leetcode 1051. 高度檢查器

題目描述

學(xué)校在拍年度紀(jì)念照時(shí),一般要求學(xué)生按照 非遞減 的高度順序排列。

請(qǐng)你返回至少有多少個(gè)學(xué)生沒有站在正確位置數(shù)量。該人數(shù)指的是:能讓所有學(xué)生以 非遞減 高度排列的必要移動(dòng)人數(shù)。

示例 1:

輸入:[1,1,4,2,1,3]
輸出:3
解釋:
高度為 4、3 和最后一個(gè) 1 的學(xué)生,沒有站在正確的位置。

提示:

  1. 1 <= heights.length <= 100
  2. 1 <= heights[i] <= 100

解法

由題可知,只需要獲得正確的非遞減序列,然后與當(dāng)前序列比較即可獲得需要移動(dòng)的個(gè)數(shù)。

sort排序比較

對(duì)序列進(jìn)行排序,獲得非遞減序列,逐個(gè)元素比較。

class Solution:
    def heightChecker(self, heights: List[int]) -> int:
        arr=sorted(heights)
        ret=0
        for i in range(len(heights)):
            if heights[i]!=arr[i]:
                ret+=1
        return ret

計(jì)數(shù)排序比較

根據(jù)提示可知元素值范圍不大,不妨申請(qǐng)一定值域范圍的序列 arr,存儲(chǔ)對(duì)應(yīng)元素值出現(xiàn)的個(gè)數(shù),此時(shí)遍歷 arr 即可獲得非遞減序列,仍然與原序列進(jìn)行逐個(gè)元素對(duì)比,獲取移動(dòng)個(gè)數(shù)。

此處元素值范圍不大,可以每個(gè)桶只存儲(chǔ)一個(gè)元素值對(duì)應(yīng)的內(nèi)容,當(dāng)值空間較大時(shí),可以針對(duì)每個(gè)桶映射一定元素值范圍的內(nèi)容,在桶內(nèi)可以自由搭配其他的排序算法。

class Solution:
    def heightChecker(self, heights: List[int]) -> int:
        arr=[0]*101
        for e in heights:
            arr[e]+=1
        index,ret=0,0
        for i in range(1,101):
            while arr[i]>0:
                if i!=heights[index]:
                    ret+=1
                arr[i]-=1
                index+=1
        return ret

參考
排序算法(八):計(jì)數(shù)排序
排序算法(九):桶排序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容