原文地址:记一道Go后端笔试题-Top相关
先来看题目:从K个元素的数据类型为int型的array中找到最大的两个数,分别用循环算法和递归算法来写。
上述题目是同事面试Go的时候分享出来的一道题目,刚好最近有面试,就拿来练练手,接下来分享一下解题的思路。
看到题目的第一感觉,认为是从一定数量的元素中取Top多少的问题,这种问题的常规方案就是利用堆排序的方案来解决,堆的初始容量为Top的数目,堆顶的元素是最小的,开始只需将slice前Top个元素放入堆中,之后从第Top+1个元素开始循环递归比较并放入堆中就可完成上述问题。
理想是丰满的,现实是残酷的,关于堆相关算法对目前来说还不是很熟练,所以只好另辟蹊径,采用硬性循环以及粗暴递归的方式来解决问题。
硬性循环代码案例如下:
package main
import "fmt"
func main() {
first, second := 0, 0
s1 := []int{1, 2, 11, 25, 24, 22, 4, 5, 7, 9}
for i := 0; i < len(s1); i++ {
sign := s1[i]
switch {
case sign > first && sign > second:
if first > second {
second = first
}
first = sign
case sign <= first &