C++ 二进制搜索()函数不使用';我不能在我的身体里工作

C++ 二进制搜索()函数不使用';我不能在我的身体里工作,c++,arrays,algorithm,vector,binary-search,C++,Arrays,Algorithm,Vector,Binary Search,问题是- 给定一个由N个不同元素组成的排序和旋转的数组a,该数组在某个点上旋转,并给定一个元素K。任务是在数组a中查找给定元素K的索引 输入: 输入的第一行包含一个整数T,表示测试用例的总数。然后,T测试用例随之出现。每个测试用例由三行组成。每个测试用例的第一行包含一个整数N,表示给定数组的大小。每个测试用例的第二行包含N个空格分隔的整数,表示数组A的元素。每个测试用例的第三行包含一个整数K,表示数组中要搜索的元素 输出: 对于每个测试用例,在新行中打印元素K的索引(基于0的索引),如果数组中不

问题是-

给定一个由N个不同元素组成的排序和旋转的数组a,该数组在某个点上旋转,并给定一个元素K。任务是在数组a中查找给定元素K的索引

输入: 输入的第一行包含一个整数T,表示测试用例的总数。然后,T测试用例随之出现。每个测试用例由三行组成。每个测试用例的第一行包含一个整数N,表示给定数组的大小。每个测试用例的第二行包含N个空格分隔的整数,表示数组A的元素。每个测试用例的第三行包含一个整数K,表示数组中要搜索的元素

输出: 对于每个测试用例,在新行中打印元素K的索引(基于0的索引),如果数组中不存在K,则打印-1

用户任务: 完成Search()函数并返回元素K的索引(如果在数组中找到)。如果元素不存在,则返回-1

预期时间复杂度:O(logn)

预期辅助空间:O(1)

限制条件:

一,≤ T≤ 100
1.≤ N≤ 107
0≤ 艾岛≤ 108
1.≤ K≤ 108

示例:
输入:
3
9
56778910123
10
3
3.1.2
1
4
3512
6
输出:
5
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;
}
//vec:元素的给定向量
//K:给定的值,我们需要找到它的索引
整数搜索(矢量向量,整数K)
{
if(二进制搜索(vec.begin(),vec.end(),K))
{
返回1;
}
否则返回-1;
}
这不是问题的逻辑,但我的目标是找到一种方法,首先需要我找出向量中是否存在元素。
但是在这里,当给出上述测试用例时,我的代码的输出是:-
-1
-1
-1

这表明在任何情况下都找不到元素,而在前两种情况下,元素实际上存在于向量中。我哪里出错了???

二进制搜索意味着您已经对数组进行了排序。
所有的输入数组都没有排序

正如您所看到的,
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;
}
模板
布尔线性搜索(迭代器开始、迭代器结束、常量ToFind和元素){
while(开始!=结束){
如果(*开始==元素)
返回true;
std::下一步(开始);
}
返回false;
}

正如@blastfunner所指出的,您可以使用
std::find
,这样做(但可能更好)

向量必须是sorted@Berto99谢谢你指出。我忽略了这个小事实。别担心,你只需要选择是对数组进行排序,还是执行线性搜索。我会编写一个修改过的二进制搜索函数,以满足时间复杂性并保持索引完整,因为这是我最后必须返回的。谢谢朋友:)@berto99请复习。@blastfull是的,对不起,是我的错