gpt4 book ai didi

algorithm - 在 k 排序的数组中查找 k

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:42 25 4
gpt4 key购买 nike

我正在尝试编写一个类似于二进制搜索的算法来在 k 排序的数组中找到 k。 (需要为 O(logn))

比如这里的k是3:5、6、7、1、2、3、4

这是我在 Java 中的尝试

public static int findk(int[] a) {
int low = 0;
int high = a.length-1;

while(low <= high) {
if(a[low] <= a[high])
return low;

int middle = (low+high)/2;
if(a[low] > a[middle])
high = middle-1;
else
low = middle+1;
}

return 0;
}

它适用于某些输入,但不适用于其他输入。这应该很容易,但我不知道出了什么问题。

即使是提示也会很好!

最佳答案

您需要找到第一个小于 a[0] 的元素。因此,您需要与 a[0] 进行比较。

public static int findk(int[] a) {
int low = 0;
int high = a.length - 1;
if (a[high] >= a[0]) // special case array completely sorted
return high + 1;
while(low < high) {
int middle = (low + high) / 2;
if(a[middle] < a[0])
high = middle;
else
low = middle + 1;
}
return low; // or high
}

开始时你会得到 [0,6],然后是 [0,3],然后是 [2,3],最后是 [3,3]。

我们不做 high = middle - 1 的原因是这样我们可能会得到我们不想要的 k 值。

关于algorithm - 在 k 排序的数组中查找 k,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49340161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com