持续创作,加速成长!这是我参与「掘金日新计划 · 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… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
这部分可以写写:
-
这道题考察了什么思想?你的思路是什么?
我们需要将数组 heights 复制一份然后将其排序,排序之后,我们比较两个数组的不同数量。
-
做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?
是一次通过的,这道简单题目没什么难度啊!
-
有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?
还可以使用计数排序。
```
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. 高度检查器
题目很简单,用计数排序和基于比较的排序都能完成此题,加油小伙子,与我一同进步吧!