最强解析面试题:最小 K 个数

Posted 魏小言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:最小 K 个数相关的知识,希望对你有一定的参考价值。


最强解析面试题:最小 K 个数

文章讲解 “ 最小 K 个数 ” 经典面试题,包含思路及源码,及解惑!

题目

给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。

思路

1、直接使用 sort 库排序进行,时间复杂度 O(logn)

sort.Ints(tar)

2、使用快排思路做数据的拆分,时间复杂度 O(n)

代码

package main

import "fmt"

func main() 
   tar := []int4, 5, 1, 6, 2, 7, 3, 8
   k, l := 2, len(tar)-1
   index := IndexSort(tar, 0, len(tar)-1)
   for index != k-1 
      if index > k-1 
         index = IndexSort(tar, 0, index-1)
       else 
         index = IndexSort(tar, index+1, l)
      
   
   fmt.Println(“res :", tar[:k])


func IndexSort(t []int, s, e int) int 
   m := t[s]
   for s < e 
      for s < e && t[e] >= m 
         e--
      
      t[s] = t[e]
      for s < e && t[s] <= m 
         s++
      
      t[e] = t[s]
   
   t[s] = m
   return s

附录

一切用数据说话,围绕核心指标,做定性分析和定量分析!

以上是关于最强解析面试题:最小 K 个数的主要内容,如果未能解决你的问题,请参考以下文章

最强解析面试题:在无序数组中取最大的K个数「建议收藏!」

最强解析面试题:在无序数组中取最大的K个数「建议收藏!」

最强解析面试题:旋转数组的最小数字

最强解析面试题:二进制中 1 的个数「建议收藏!炸!」

最强解析面试题:二进制中 1 的个数「建议收藏!炸!」

最强解析面试题:链表中倒数第 k 个节点「建议收藏!」