力扣1051. 高度检查器

113 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

力扣1051. 高度检查器

一、题目描述:

学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。

排序后的高度情况用整数数组 expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。

给你一个整数数组 heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。

返回满足 heights[i] != expected[i] 的 下标数量 。

示例:

输入:heights = [1,1,4,2,1,3]

输出:3

解释:

高度:[1,1,4,2,1,3]

预期:[1,1,1,2,3,4]

下标 2 、4 、5 处的学生高度不匹配。

示例 2:

输入:heights = [5,1,2,3,4]

输出:5

解释:

高度:[5,1,2,3,4]

预期:[1,2,3,4,5]

所有下标的对应学生高度都不匹配。

示例 3:

输入:heights = [1,2,3,4,5]

输出:0

解释:

高度:[1,2,3,4,5]

预期:[1,2,3,4,5]

所有下标的对应学生高度都匹配。

提示:

1 <= heights.length <= 100

1 <= heights[i] <= 100

来源:力扣(LeetCode) 链接:leetcode.cn/problems/he… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

这部分可以写写:

  1. 这道题考察了什么思想?你的思路是什么?

    我们需要将数组 heights 复制一份然后将其排序,排序之后,我们比较两个数组的不同数量。

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    是一次通过的,这道简单题目没什么难度啊!

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    还可以使用计数排序。

image.png

```
 class Solution:
     def heightChecker(self, heights: List[int]) -> int:
         m = max(heights)
         cnt = [0] * (m + 1)
 ​
         for h in heights:
             cnt[h] += 1
         
         idx = ans = 0
         for i in range(1, m + 1):
             for j in range(cnt[i]):
                 if heights[idx] != i:
                     ans += 1
                 idx += 1
         
         return ans
 ​
 作者:LeetCode-Solution
 链接:https://leetcode.cn/problems/height-checker/solution/gao-du-jian-cha-qi-by-leetcode-solution-jeb0/
 来源:力扣(LeetCode)
 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
```

三、AC 代码:

 func heightChecker(heights []int) (ans int) {
     sorted := append([]int{}, heights...)
     sort.Ints(sorted)
     for i, v := range heights {
         if v != sorted[i] {
             ans++
         }
     }
     return
 }

四、总结:

如果你还有更多的思考、分析、总结,通通都加上来吧~

1051. 高度检查器

题目很简单,用计数排序和基于比较的排序都能完成此题,加油小伙子,与我一同进步吧!