我有一个未排序的向量,我想以递归方式返回此向量中的第k个最大数字。有办法做到这一点吗?
Ex:2 3 41 67 0 9
我想要返回第二大数字41。 谢谢!
答案 0 :(得分:0)
好吧,
在矢量中搜索最高数字,将其从矢量中删除,重复 k 次。
在伪代码中:
function findKthHighestNumber(vetor, k):
i := findIndexOfHighestNumber(vector)
if k = 1:
return vector[i]
else
return findKthHighestNumber(concat(vector[0..i-1], vector[i+1..vector.length]), k-1)
当然,实际的实现取决于所使用的编程语言。此外,还应提供findIndexOfHighestNumber
,但这是一项不同的任务......
答案 1 :(得分:0)
你使用像
这样的帮手(define (nth-max vec nth cur-idx cur-max lower-than)
...)
或与命名let相同。其中的逻辑应该是:
你可以从低于+ Inf.0和cur-max开始作为第一个元素-Inf.0。如果结果是-Inf.0则没有解决方案..例如。在#(5 5 5 5)中找到第二大