機試筆記6 查詢

2022-09-19 01:12:12 字數 1188 閱讀 1006

查詢的問題一般可能會想到排序+二分查詢,或者順序查詢,但是在機試中很容易出錯,所以比較推薦用c++的map,雖然它實現的是雜湊表的功能,但是它的實現確實紅黑樹,所以平均時間複雜度為nlogn

第一類查詢問題即靜態查詢,有一組資料,在這資料中找某乙個值,當然值不會簡簡單單的給個整數,他可能是個結構體。這類一般用map就可以解決

第二類則是動態查詢,在查詢的同時,還可能進行插入或者刪除,這樣的話排序+二分查詢時間複雜度會變高,使用map依舊可以完成。

例題一輸入要求:

第一行輸入乙個正整數n(n < 100000)

第二行輸入n個正整數,用空格隔開。

第三行輸入乙個正整數q(q<100000),表示查詢次數。 接下來輸入q行,每行乙個正整數x,查詢x是否存在。

輸出要求:

如果x存在,請輸出find,如果不存在,請輸出no,並將x加入到集合中。

#include using

namespace

std;

intmain()

intq;

cin >>q;

for(int i=0;i)

}return0;

}

轉換下思路,記錄個數就可以解決了。

二分查詢**:

#include using

namespace

std;

intmain()

intkey;

cin >> key;//

要查詢的值

sort(arr,arr+n);

int left = 0

;

int right = n-1

;

while(left<=right)

}cout

<<"

no find

"

}

北京大學機試,查詢學生資訊,編號1177答案

#include using

namespace

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...