题目描述
查找数组 arr 中第 k 小的奇数,如果不存在则返回 0。
计算出时间复杂度(注意代码注释,尽可能不用全排序,不要使⽤库函数或脚本中已经实现好的排序算法和⼯具,需要⾃⼰实现数据结构和所需要的算法)
解题方案
思路
- 属于 Top K 问题
- 假设数组中数据范围有限,使用一个额外数组,存放每个数字出现的次数,数组下标位置就是数字大小,此种方式为「计数排序法」
- 时间复杂度:O(N),N 为第 k 小的奇数的大小
- 最坏时间复杂度:当不存在时,需要遍历完 counter 数组,O(M),M 为指定数组的范围
- 空间复杂度:O(M),需要长度为 M 的额外数组。
- 标签:
计数排序
代码
// Java |
测试代码
public static void main(String[] args) { |