binary_search() 函数在我的函数体中不起作用
binary_search() function doesn't work in my function body
问题是-
给定一个由 N 个不同元素组成的排序和旋转数组 A,该数组在某个点旋转,并给定一个元素 K。任务是在数组 A 中找到给定元素 K 的索引。
输入:
输入的第一行包含一个整数 T,表示测试用例的总数。然后是 T 个测试用例。每个测试用例由三行组成。每个测试用例的第一行包含一个整数 N,表示给定数组的大小。每个测试用例的第二行包含N个space-分隔的整数,表示数组A的元素。每个测试用例的第三行包含一个整数K,表示要在数组中搜索的元素。
输出:
对于每个测试用例,在新行中打印元素 K 的索引(基于 0 的索引),如果数组中不存在 K,则打印 -1.
用户任务:
完成 Search() 函数和 return 元素 K 的索引(如果在数组中找到)。如果该元素不存在,则 return -1.
预期时间复杂度:O(log N)。
预期辅助Space:O(1)。
限制条件:
1≤T≤100
1≤N≤107
0 ≤ Ai ≤ 108
1 ≤ K ≤ 108
示例:
输入:
3
9
5 6 7 8 9 10 1 2 3
10
3
3 1 2
1
4
3 5 1 2
6
输出:
5
1
-1
我对所需功能的解决方案:-
// vec : given vector of elements
// K : given value whose index we need to find
int Search(vector<int> vec, int K)
{
if(binary_search(vec.begin(),vec.end(), K))
{
return 1;
}
else return -1;
}
这不是问题的逻辑,但我的目标是采用一种方法,首先需要我找出矢量中是否存在元素。
但是这里给出上述测试用例时我的代码的输出是:-
-1
-1
-1
这表明在任何情况下都找不到该元素,而在前两种情况下它实际上存在于向量中。我哪里错了??
二进制搜索意味着您已经对数组进行了排序。
您的所有输入数组都未排序
如您所见here,std::binary_search
的先决条件之一是您要搜索的数组必须排序,您可以编写自己的线性搜索:
template<class Iterator, class ToFind>
bool linear_search(Iterator start, Iterator end, const ToFind& element){
while(start != end){
if(*start == element)
return true;
std::next(start);
}
return false;
}
正如@Blastfurnace 所指出的,您可以使用 std::find
来做到这一点(但可能更好)
问题是-
给定一个由 N 个不同元素组成的排序和旋转数组 A,该数组在某个点旋转,并给定一个元素 K。任务是在数组 A 中找到给定元素 K 的索引。
输入: 输入的第一行包含一个整数 T,表示测试用例的总数。然后是 T 个测试用例。每个测试用例由三行组成。每个测试用例的第一行包含一个整数 N,表示给定数组的大小。每个测试用例的第二行包含N个space-分隔的整数,表示数组A的元素。每个测试用例的第三行包含一个整数K,表示要在数组中搜索的元素。
输出: 对于每个测试用例,在新行中打印元素 K 的索引(基于 0 的索引),如果数组中不存在 K,则打印 -1.
用户任务: 完成 Search() 函数和 return 元素 K 的索引(如果在数组中找到)。如果该元素不存在,则 return -1.
预期时间复杂度:O(log N)。
预期辅助Space:O(1)。
限制条件:
1≤T≤100
1≤N≤107
0 ≤ Ai ≤ 108
1 ≤ K ≤ 108
示例:
输入:
3
9
5 6 7 8 9 10 1 2 3
10
3
3 1 2
1
4
3 5 1 2
6
输出:
5
1
-1
我对所需功能的解决方案:-
// vec : given vector of elements
// K : given value whose index we need to find
int Search(vector<int> vec, int K)
{
if(binary_search(vec.begin(),vec.end(), K))
{
return 1;
}
else return -1;
}
这不是问题的逻辑,但我的目标是采用一种方法,首先需要我找出矢量中是否存在元素。
但是这里给出上述测试用例时我的代码的输出是:-
-1
-1
-1
这表明在任何情况下都找不到该元素,而在前两种情况下它实际上存在于向量中。我哪里错了??
二进制搜索意味着您已经对数组进行了排序。 您的所有输入数组都未排序
如您所见here,std::binary_search
的先决条件之一是您要搜索的数组必须排序,您可以编写自己的线性搜索:
template<class Iterator, class ToFind>
bool linear_search(Iterator start, Iterator end, const ToFind& element){
while(start != end){
if(*start == element)
return true;
std::next(start);
}
return false;
}
正如@Blastfurnace 所指出的,您可以使用 std::find
来做到这一点(但可能更好)