algorithm - 在单峰数组中找到第 k 个元素

标签 algorithm big-o

给定一个包含 n 个不同元素的单峰数组 A(这意味着它的条目按递增顺序排列直到它的最大元素,之后它的元素按递减顺序排列),一个整数 p(即递增的第一部分的长度) 和 k(第 k 个最小元素)给出一个算法来计算在 O(log n) 时间内运行的第 k 个最小元素的值。

例子:

A= {1,23,50,30,20,2} 
p= 2
k=3

答案:20

编辑

我试过这个:

def ksmallest(arr1, arr2, k):
if len(arr1) == 0:
    return arr2[len(arr2)-k-1]
elif len(arr2) == 0:
    return arr1[k]
mida1 = (int)(len(arr1)/2)
mida2 = (int)((len(arr2)-1)/2)
if mida1+mida2<k:
    if arr1[mida1]>arr2[mida2]:
        return ksmallest(arr1, arr2[:mida2], k-(len(arr2)-mida2))
    else:
        return ksmallest(arr1[mida1+1:], arr2, k-mida1-1)
else:
    if arr1[mida1]>arr2[mida2]:
        return ksmallest(arr1[:mida1], arr2, k)
    else:
        return ksmallest(arr1, arr2[mida2+1:], k)

最佳答案

对于初学者来说,再看看你的索引。你开始于:

if len(arr1) == 0:
    return arr2[len(arr2)-k-1]
elif len(arr2) == 0:
    return arr1[len(arr1)-k-1]

但是可以肯定的是,如果 arr1 是升序的,而 arr2 是降序的,则不会在同一位置找到第 k 个最小元素。

关于algorithm - 在单峰数组中找到第 k 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15625316/

相关文章:

algorithm - 二分查找运行时间上限 : Recurrence Relation

algorithm - 这个DAG拓扑重组怎么调用呢?

algorithm - 解决递归关系 : T(n) = 3T(n/5) + lgn * lgn

java - 二进制 watch 算法 (Java)

java - 随机播放函数复杂性

algorithm - 算法的最坏情况如何有不同的界限?

javascript - 如何在 JavaScript 中自动计算算法的时间复杂度?

complexity-theory - 如果算法时间复杂度是 theta(n^2),是否有可能对于一个输入它会在 O(n) 中运行?

javascript - 分配工作人员任务

algorithm - 附加字符串和数组的类似 Go 函数未按预期运行