假设我们有一个称为nums的唯一整数列表。我们必须找到使用标准二进制搜索仍然可以成功找到的整数数量。
因此,如果输入类似于[2,6,4,3,10],则输出将为3,就好像我们使用二进制搜索来查找4一样,我们可以在第一次迭代时找到它。经过两次迭代,我们还可以找到2和10。
为了解决这个问题,我们将遵循以下步骤-
定义一个函数help()
,它将以目标,一个数组和数字,
低:= 0
高:= nums的大小-1
当低<=高时,执行-
高:=中-1
低:=中+ 1
返回真
中:=低+(高-低)/ 2
如果nums [mid]与目标相同,则-
如果nums [mid] <目标,则-
除此以外
返回假
从主要方法中,执行以下操作-
ret:= 0
对于数字中的每个元素
ret:= ret + help(i,nums)
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: bool help(int target, vector<int> & nums) { int low = 0; int high = nums.size() - 1; while (low <= high) { int mid = low + (high - low) / 2; if (nums[mid] == target) return true; if (nums[mid] < target) { low = mid + 1; } else { high = mid - 1; } } return false; } int solve(vector<int> & nums) { int ret = 0; for (int i : nums) { ret += help(i, nums); } return ret; } }; main() { Solution ob; vector<int> v = {2,6,4,3,10}; cout << (ob.solve(v)); }
{2,6,4,3,10}
输出结果
3