输入包含两行:
第一行有两个整数n(1 ≤ n ≤ 100000000),表示数组数字个数n;target,即查找的目标值。 第二行为n个整数,范围均在32位整数,以空格分隔,保证输入数据合法
如果存在,输出target出现的下标,否则输出-1
7 0 0 1 2 3 4 5 6
0
#include <stdio.h> #include <stdlib.h> int main(const int argc, const char** argv) { int n, target; fscanf(stdin, "%d %d", &n, &target); int i, nums[n]; for (i = 0; i < n; ++i) fscanf(stdin, "%d", nums + i); int l = 0, m, r = n - 1; while (l <= r) { m = l + ((r - l) >> 1); if (target == *(nums + m)) return fprintf(stdout, "%d\n", m), 0; if (target < *(nums + m)) r = m - 1; else l = m + 1; } return fprintf(stdout, "%d\n", -1), 0; }
#include<stdio.h> int a[100000000],n,i,target,l,r; int main(){ for(scanf("%d%d",&n,&target),i=0;i<n;i++) scanf("%d",a+i); for(l=0,r=n-1;l+1<r;){ int mid=l+(r-l)/2; if(mid<=target) l=mid; else r=mid; } if(a[l]!=target&&a[r]!=target) printf("-1\n"); else printf("%d\n",a[l]==target?l:r); }
import java.util.Scanner; /** * @author ranran * @version V1.0 * @Title: * @Package First * @Description: * @date 2017/9/2 16:02 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int target = sc.nextInt(); int[] array = new int[n]; for (int i = 0; i < n; i++) { array[i] = sc.nextInt(); } int low = 0; int high = n - 1; while (low <= high) { int mid = (low + high) / 2; if (array[mid] == target) { System.out.println(mid); return; } else if (array[mid] < target) { low = mid + 1; } else { high = mid - 1; } } System.out.println(-1); } }
#include <iostream> #include <vector> using namespace std; int binary_search(vector<int> nums, int search_num) { int left = 0; int right = nums.size() - 1; int mid; while (left <= right) { mid = (left + right) / 2; if (nums[mid] == search_num) return mid; else if (nums[mid] > search_num) right = mid - 1; else left = mid + 1; } return -1; } int main() { int vec_nums; int search_num; cin >> vec_nums >> search_num; vector<int> vec(vec_nums); for (int i = 0; i < vec_nums; i++) cin >> vec[i]; cout << binary_search(vec, search_num) << endl; return 0; }
using namespace std;
vector<int> nVec;
int binary_search(int num,vector<int>::iterator beg,vector<int>::iterator end,int &nPos) {
vector<int>::iterator iterTemp = beg;
vector<int>::iterator mid = beg + (end - beg) / 2;
int OK = 1;
while (mid != num) {
if (end <= beg) {
OK = 0;
break;
}
if (mid > num) {
end = mid-1;
}
else {
beg = mid+1;
}
mid = beg + (end - beg) / 2;
//cout << "(" << beg << ", " << end << ", " << *mid << ")\n";
}
if(OK)
nPos = mid - iterTemp;
else
nPos = -1;
return nPos;
}
int main() {
int nSize,n;
cin >> nSize>>n;
int nTemp;
for (int i = 0; i < nSize; i++) {
cin >> nTemp;
nVec.push_back(nTemp);
}
int nPos = -1;
cout << binary_search(n,nVec.begin(), nVec.end()--,nPos) << endl;
return 0;
}