cpp二进制搜索问题,计算给定数组中输入元素的出现次数
cpp Binary Search Problem, counting occurence of input element in a given array
我只想知道这段代码中的问题是什么;我从youtube上得到的,但问题是当我传递x的值时。它什么也没做,只显示空白屏幕。
#include <iostream>
#include <algorithm>
using namespace std;
// use binary search
int find(int arr[], int n, int x, bool leftmost){
int low = 0;
int high = n-1;
int mid = low + (high - low)/2;
int res = -1;
while (low <= high){
if (arr[mid] == x){
res = mid;
if (leftmost){ // it flag is true we will find the left most
high = mid - 1;
}else{ //else we will find the right most
low = mid+1;
}
}
if (arr[mid] > x){
high = mid - 1;
}
else{
low = mid +1;
}
}
return res;
}
int main() {
int arr[] = {2,2,3,3,3,3};
int n = sizeof(arr) / sizeof(arr[0]);
int x;
cout << "Enter the number "<< endl;
cin >> x;
int leftidx = find(arr, n, x, true);
int rightidx = find(arr, n, x, false);
cout << (rightidx - leftidx) +1;
return 0;
}
在其他几个程序中出现此问题。所以,如果你有时间,帮我。感谢
您没有更新mid
变量,因此循环将无限。将此添加到循环的末尾:
/...
else{
low = mid +1;
}
mid = (low + high) / 2; // add this line
也要保持简单,下面的代码:
int mid = low + (high - low)/2;
相当于:
int mid = (low + high)/2;
//or just
int mid = high / 2;
不要给代码增加不必要的复杂性。
相关文章:
- C++如何通过用户输入删除列表元素
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 静态堆栈函数不会 1) 输入第一个元素 2)添加新元素时识别旧元素
- 如何输入数组的元素,每次获得新元素时,我们将其放在数组的中间?
- 将包含多个元素的字符串作为输入并转换为矢量 C++
- 如何计算字符串中用户输入元素的出现次数?
- 在数组中显示第一个元素用户输入
- Qt,操作缓慢时不要冻结GUI输入元素
- 函数返回包含输入容器的特定元素的容器
- 如何让用户C++输入少于 10 个元素的数组
- 如何将输入到具有未知数量元素的数组中?
- 与 C++ 中一行中的用户输入数组元素相关的问题
- 数组元素的用户输入
- C 中的动态数组(用指针表示) - 输入元素
- C 中结构的输入元素
- 如何使用用户输入正确修改 2D 数组中的字符数组元素?专门用于电影院座位
- 根据另一个数组的元素输入,而无需复制
- 如何更新最近在 std::vector<pair<int, int>> 中输入的元素?
- 用户将元素输入到 2D 矢量 c++ 中
- 将未知数据类型的元素输入到向量中并传递给函数模板