微軟面試題:在排序陣列中,找出給定數字的出現次數,比如 [1, 2, 2,2, 3] 中2的出現次數是3次
思路1:最笨拙的方法,從頭開始挨個判斷是否是要尋找的數字
思路2:採用二分查詢方法(先二分法找到最先出現的位置,然後從最先出現位置到最後再次二分查詢找到最後出現的位置)。當然找最末位置的時候也可以不用二分,直接從第一次出現位置之後乙個乙個判斷。個人認為在陣列資料量非常大的時候還是用兩次二分效率比較高
思路3:採用stl中的equal_range函式
下面是我根據以上思路的程式設計實現,望大家批評指導。
思路1
#include
using namespace std;
int occurnum(int sortedarray, int number)
}return counter;
}int main()
;int number;
cin>>number;
int time = 0;
time= occurnum(testarray,number);
cout《思路2
#include
using namespace std;
int occurnum(int sortedarray, int number)
low = begin;
if(sortedarray[low] != number)
return 0;
//找出最後一次出現的位置
begin = low;
end = sizeof(sortedarray);
while(begin < end)
high = end;
//求出數字出現次數
counter = high - low + 1;
return counter;
}int main()
;int number;
cin>>number;
int time = 0;
time = occurnum(testarray,number);
cout《思路3
#include
#include
using namespace std;
int occurnum(int sortedarray, int number)
int main()
;int number;//要查詢的數字
cin>>number;
int time = occurnum(testarray,number);
cout } 題目 小明和小強都是張老師的學生,張老師的生日是m月n日,2人都知道張老師的生日是下列10組中的一天,張老師把m值告訴了小明,把n值告訴了小強,張老師問他們知道他的生日是那一天嗎?3月4日 3月5日 3月8日 6月4日 6月7日 9月1日 9月5日 12月1日 12月2日 12月8日 小明說 如果我... fly.c4 推薦您必看!六.演算法題 說明 這些題就不是什麼花樣了,考的是你的基礎知識怎麼樣。再聰明而沒有實學的人都將會被這些題所淘汰。1.鍊錶和陣列的區別在 2.編寫實現鍊錶排序的一種演算法。說明為什麼你會選擇用這樣的方法?3.編寫實現陣列排序的一種演算法。說明為什麼你會選擇用這樣的方法?4.請... 1.燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時乙個小時十五分鐘呢?答 點燃繩子a的兩端,和繩子b的 一端,當a燒完時,b餘下的可以燒半個小時 這時把b的另一端點燃,並開始計時,等b燒完時可確定15分鐘,然後再點燃繩子c 兩端 燒完總時間為1小時...微軟面試題
微軟面試題
微軟面試題