方法一 sort排序:
创建一个元素和heights一模一样的expect数组 ,将expect数组从小到大进行排序,比较heights和expect相同位置不同的元素个数
var heightChecker = function(heights) {
var expect = [],count=0
for(const n of heights){
expect.push(n)
}
expect.sort((a,b)=>a-b)
for(let i=0;i<heights.length;i++){
if(heights[i]!=expect[i]) count++
}
return count
};
消耗时间和内存起情况:
方法二 计数排序
题目已经说明:1<= 数组长度 <=100,1<= 数组元素值 <=100,我们知道操作的次数不会很大。
为了方便操作,我们创建一个101 长度的数组,每遍历到一个数字,就把该数字当做一个索引,找到对应桶中那个索引的值,递增 1 即可。
var heightChecker = function(heights) {
let bucket = new Array(101).fill(0);
for (let i of heights) {
bucket[i]++;
}
let ans = 0;
for (let i = 1, j = 0; i < bucket.length; i++) {
while (bucket[i]-- > 0) {
if (heights[j++] !== i) ans++;
}
}
return ans;
};
消耗时间和内存情况: