nums라고 하는 고유한 정수 목록이 있다고 가정합니다. 표준 이진 검색을 사용하여 여전히 성공적으로 찾을 수 있는 정수의 수를 찾아야 합니다.
따라서 입력이 [2,6,4,3,10]과 같으면 출력은 3이 됩니다. 마치 이진 검색을 사용하여 4를 찾는 것처럼 처음에는 찾을 수 있습니다. 반복. 또한 두 번의 반복 후에 2와 10을 찾을 수 있습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
help() 함수를 정의하면 대상, 배열 및 숫자가 필요합니다.
-
낮음 :=0
-
high :=숫자 크기 - 1
-
낮음 <=높음, 수행 -
-
중간 :=낮음 + (높음 - 낮음) / 2
-
nums[mid]가 target과 같으면 -
-
true를 반환
-
-
nums[mid]
-
낮음 :=중간 + 1
-
-
그렇지 않으면
-
높음 :=중간 - 1
-
-
-
거짓을 반환
-
기본 방법에서 다음을 수행하십시오 -
-
ret :=0
-
숫자의 각 요소 i에 대해
-
ret :=ret + help(i, nums)
-
-
리턴 렛
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#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