gpt4 book ai didi

c - 这个二进制搜索函数有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:43 24 4
gpt4 key购买 nike

我正在尝试解决二进制搜索的 Spoj 问题,但我一直得到“错误答案”,而且我看不到我的问题。这是我的 bsearch 函数:

int binarySearch(int numbers[], int size, int key)
{
int start = 0;
int end = size - 1;
int middle;

while(start <= end)
{
middle = start + (end - start)/2;

if(key < numbers[middle])
end = middle - 1;
else if(key > numbers[middle])
start = middle + 1;
else
return middle;
}

return -1;
}

这是我的主要功能

int main()
{
int *numbers;
int n_numbers, n_queries, key, i, found;

scanf("%d %d", &n_numbers, &n_queries);
numbers = (int*)malloc(n_numbers * sizeof(int));

for(i = 0; i<n_numbers; i++)
scanf("%d", &numbers[i]);

for(i = 0; i<n_queries; i++)
{
scanf("%d", &key);
found = binarySearch(numbers, n_numbers, key);
printf("%d\n", found);
}

return 0;
}

这是 SPOJ 问题: http://www.spoj.com/problems/BSEARCH1/

最佳答案

问题是您需要返回第一次出现的位置(从零开始),并且您会在找到 key 后立即返回。

但数组可能是:0 1 1 1 1 1 1 1 1 1 1 1 2

关键是 1。您应该返回 1(第一次出现的位置),而不是返回 6。

关于c - 这个二进制搜索函数有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13922893/

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