查詢的問題一般可能會想到排序+二分查詢,或者順序查詢,但是在機試中很容易出錯,所以比較推薦用c++的map,雖然它實現的是雜湊表的功能,但是它的實現確實紅黑樹,所以平均時間複雜度為nlogn
第一類查詢問題即靜態查詢,有一組資料,在這資料中找某乙個值,當然值不會簡簡單單的給個整數,他可能是個結構體。這類一般用map就可以解決
第二類則是動態查詢,在查詢的同時,還可能進行插入或者刪除,這樣的話排序+二分查詢時間複雜度會變高,使用map依舊可以完成。
例題一輸入要求:
第一行輸入乙個正整數n(n < 100000)
第二行輸入n個正整數,用空格隔開。
第三行輸入乙個正整數q(q<100000),表示查詢次數。 接下來輸入q行,每行乙個正整數x,查詢x是否存在。
輸出要求:
如果x存在,請輸出find,如果不存在,請輸出no,並將x加入到集合中。
#include usingnamespace
std;
intmain()
intq;
cin >>q;
for(int i=0;i)
}return0;
}
轉換下思路,記錄個數就可以解決了。
二分查詢**:
#include usingnamespace
std;
intmain()
intkey;
cin >> key;//
要查詢的值
sort(arr,arr+n);
int left = 0
;
int right = n-1
;
while(left<=right)
}cout
<<"
no find
"
}
北京大學機試,查詢學生資訊,編號1177答案
#include usingnamespace
std;
intmain()
for(int i=0;i)
m.clear();
f.clear();
}return0;
}
這裡要注意,如果題目要求多組資料,一定要在每組完成後,清空你的資料結構!!!!
機試筆記1
1.scanf遇到空格會結束,所以讀入一行字串時可以使用getline cin,str 或者gets str gets會把回車讀入 2.在scanf和gets之間加入getchar 來消除 n 3.進製轉換 x十六進製制小寫,x十六進製制大寫 o 八進位制 4.2d表示這個數字佔2位,02d可以使數...
九度機試筆記20170903 1
題目1488 百萬富翁問題 include using namespace std int main cout 0 題目1489 計算兩個矩陣的乘積 include using namespace std int main int b 3 2 int sum 0,i,j,k while cin a ...
九度機試筆記20170903 2
學習 九度機試指南3 如下。有乙個遺留問題 題目1051 數字階梯求和 等待解決,mark一下。題目1153 括號匹配問題 include include using namespace std stack s char src 101 char dst 101 int main else if s...