高度檢查器(力扣)
題目
學校在拍年度紀念照時,一般要求學生按照 非遞減 的高度順序排列。
請你傳回至少有多少個學生沒有站在正确位置數量。該人數指的是:能讓所有學生以 非遞減 高度排列的必要移動人數。
示例:
輸入:[1,1,4,2,1,3]
輸出:3
解釋:
高度為 4、3 和最後一個 1 的學生,沒有站在正确的位置。
提示:
1 <= heights.length <= 100
1 <= heights[i] <= 100
代碼
class Solution {
public int heightChecker(int[] heights) {
int[] arr =new int[101];//因為1 <= heights[i] <= 100;是以建立101個桶
for(int height: heights){ arr[height]++;}
//周遊數組heights,将一樣的數放在同一個桶内,并計算每個桶内有多少個元素
int count = 0;
for(int i=1,j=0; i<arr.length;i++){
//i是桶中的元素的值,arr[i]是元素個數
while(arr[i]-->0){//從桶裡取數
if(heights[j++] != i){count++;}
// 從桶中取出元素時,元素的排列順序就是非遞減的,然後與heights中的元素比較,如果不同,電腦就加1
}
}
return count;
}
}