【发布时间】:2021-06-19 00:03:46
【问题描述】:
我被困在question。我的代码不断返回3 作为输入nums = [4,5,6,7,0,1,2], target = 0 的输出。我正在做一些二进制搜索的修改版本并打印中间索引的索引并检查该索引处的值是否等于目标值。二进制搜索中中间索引的值是stdout:3 5 4,而不是返回4我的程序返回3。你能告诉我我的逻辑哪里不正确吗?
class Solution {
public:
int bin_search(vector<int>& nums,int target,int l,int r){
int m;
m=(r+l)/2;
cout<<m<<" ";
// if(r==l) break;
if(nums[m]==target) return m;
else if(r==l && nums[m]!=target) return -1;
if(target>=nums[l] && target<=nums[m]){
m=bin_search(nums,target,l,m);
}
else if(target>=nums[m+1] && target<=nums[r]){
m=bin_search(nums,target,m+1,r);
}
// if(nums[m]==target) return m;
return m;
}
int search(vector<int>& nums, int target) {
int n=nums.size();
int f;
f=bin_search(nums,target,0,n-1);
return f;
}
};
【问题讨论】:
-
二分查找只能用于已排序的数组。 (应用于数组时)
-
当你递归调用
bin_search时,你对那些调用返回的结果做了什么? -
@Someprogrammerdude 哦,谢谢
m=bin_search(nums,target,l,m)应该在代码中。 -
请注意,在
bin_search()中调用bin_search()并将结果值丢弃是没有意义的。
标签: c++ arrays binary-search