【LeetCode】高度检查器 Java 题解
题目描述
学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。
排序后的高度情况用整数数组 expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。
给你一个整数数组 heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。
返回满足 heights[i] != expected[i] 的 下标数量 。
思路分析
今天的算法题目是数组处理题目,题目容易理解,排序后的高度情况用整数数组 expected 表示,需要找出 heights[i] != expected[i] 的 下标数量。
理解题目之后,我们需要做的就是对整个数组进行排序。排序问题,可以采用比较排序的方法,算法的时间复杂度是 O(n log n)。针对这个题目,我们也可以采用非比较类的计数排序。什么是计数排序呢?
计数排序是一个非基于比较的排序算法,该算法于 1954 年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中 k 是整数的范围),快于任何比较排序算法。
也就是说,我们利用数组下标是有序递增的特性,统一每一个数字出现的次数,然后输出的排序方法。记数排序利用额外的空间,提升了排序的效率。实现代码如下,供参考。
通过代码
总结
上述算法的时间复杂度是 O(m * n), 空间复杂度是 O(n)
纸上得来终觉浅,绝知此事要躬行。坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/b3efd920f9cc606a3ae8f63ac】。文章转载请联系作者。
评论