1051. 高度检查器

排序后比较:

  1. class Solution {
  2. public int heightChecker(int[] heights) {
  3. int [] temp =heights.clone();
  4. Arrays.sort(heights);
  5. int cnt=0;
  6. for(int i=0;i<heights.length;i++){
  7. if(temp[i]!=heights[i])cnt++;
  8. }
  9. return cnt;
  10. }
  11. }

会浪费一定的空间,0~100 最快的排序时 计数排序

计数排序

  public static int heightChecker(int[] heights) {
        int m = Arrays.stream(heights).max().getAsInt();
        int[] cnt = new int[m + 1];
        for (int h : heights) {
            ++cnt[h];
        }

        int idx = 0, ans = 0;
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= cnt[i]; ++j) {
                if (heights[idx] != i) {
                    ++ans;
                }
                ++idx;
            }
        }
        return ans;
    }