7-1 二分查詢 (20分)

我該學習了發表於2020-12-17

7-1 二分查詢 (20分)

利用二分查詢找出所給出的數在陣列中的下標

輸入格式:

第一行輸入n和m表示陣列有n個資料,m表示要對m個數進行查詢

輸出格式:

所有輸出在一行完成,行末沒有多餘空格和多餘回車。

輸入樣例:

5 5
1 2 3 4 5
1 2 3 4 5

輸出樣例:

0 1 2 3 4

AC

這個如果使用cin輸入的話,必須加上加速器,否則就會執行超時的。

還可以使用scanf輸入,這裡就可以不使用加速器。

二分查詢之前貌似寫過一次,

01-複雜度3 二分查詢 (20分)

,,,
但是,這次我的榆木腦袋又又又又又做不出來了。

演算法詳情還是看的百度,,,,,,

#include<bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int m,n;
	cin>>n>>m;
	int a[n];
	for(int i=0; i<n; i++)
		cin>>a[i];
	int cnt=0;
	int x;
	while(m--) {
		cin>>x;
		int low=0;
		int high=n-1;
		while(low<=high) {
			int middle=(low+high)/2;
			if(x==a[middle]) {
				if(cnt++)
					cout<<" ";
				cout<<middle;
				break;
			} else if(x>a[middle]) {
				low=middle+1;
			} else if(x<a[middle]) {
				high=middle-1;
			}
		}
	}
	return 0;
}

相關文章