# Binary Search# Array# Iteration

d732 - 二分搜尋法

🔗 前往 ZeroJudge 原題

題目描述

題目要求給定一個嚴格遞增的數列 A 和 K 個詢問,對於每個詢問 X,在數列 A 中尋找是否存在與 X 相等的元素。如果存在,輸出該元素在數列中的索引(從 1 開始計數);否則,輸出 0。

解題思路

題目描述中明確指出數列是嚴格遞增的,因此可以使用二分搜尋法來高效地尋找目標值。對於每個詢問,在數列 A 中執行二分搜尋,如果找到目標值,則輸出其索引加 1;否則,輸出 0。 程式碼中未使用二分搜尋法,而是使用巢狀迴圈進行線性搜尋,效率較低。

複雜度分析

  • 時間複雜度: O(N*K)
  • 空間複雜度: O(N+K)

程式碼

#include <iostream>

using namespace std;

int main(){
	int a,b;
	while(cin >> a >> b){
		int c[a],d[b];
		for(int i=0;i<a;i++){
			scanf("%d",&c[i]);
		}
		for(int i=0;i<b;i++){
			scanf("%d",&d[i]);
		}
		for(int j=0;j<b;j++){
			for(int i=0;i<a;i++){
				if(d[j]==c[i]){
					printf("%d\n",i+1);
					i=a;
				}
				else if(d[j]<c[i]){
					printf("0\n");
					i=a;
				}
			}
		}
	}
}

Discussion