c 練習2 微軟面試題

2021-06-01 17:55:00 字數 1316 閱讀 1591

微軟面試題:在排序陣列中,找出給定數字的出現次數,比如 [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小時...