2017微軟面試演算法題回顧

2021-07-31 03:40:35 字數 770 閱讀 8948

慘痛的回憶= =

1.求乙個陣列中的逆序對數

思路:o(n2)的解法很明顯,暴力破解即可。但這肯定不是面試官要的答案,很明顯這樣的題是找至少o(nlogn)的解法。

考慮使用歸併排序,在歸併排序中是將陣列以mid分為左右兩部分,合併到新的陣列中的時候,比較a[i]和a[j]的大小,如果a[i]比a[j]大則a[i]之後到mid的所有數都比a[j]大,是逆序對。在遞迴呼叫中計算所有的a[i]比a[j]大的情況。

int ans=0;

void merge(int *a,int *storage,int low,int mid,int high)

}while(i<=mid)

storage[j++]=a[i++];

while(k<=high)

storage[j++]=a[k++];

for(int

index=low;index

<=high;index++)

a[index]=storage[index];

}void mergesort(int a,int storage,int low,int high)

2.設計乙個資料結構,在o(1)的時間複雜度下完成get(i),set(i,v),setall(v)的操作,比如乙個陣列,取第i個元素,設定第i個元素為v,把所有元素設定為v

3.給兩個樹的根節點,比較a樹是不是b樹的子樹

2017美團面試演算法題

9月份去參加美團的面試,遇到乙個挺有意思的題,哈哈哈,現摘錄如下 問題描述 將1到9九個數字填入上圖,每個數字能且僅能使用一次,使得三條邊的四個數字之和相等。解答 將a1到a9排成一排,然後求全排列,如果滿足a1 a2 a3 a4 a4 a5 a6 a7 a1 a7 a8 a9,則為輸出。據此程式設...

四道微軟面試演算法題

1 乙個整數數列,元素取值可能是0 65535中的任意乙個數,相同數值不會重複出現。0是例外,可以反覆出現。請設計乙個演算法,當你從該數列中隨意選取5個數值,判斷這5個數值是否連續相鄰。注意 5個數值允許是亂序的。比如 8 7 5 0 6 0可以通配任意數值。比如 8 7 5 0 6 中的0可以通配...

四道微軟面試演算法題

朋友去ms面試,我從他口裡探到幾道程式設計面試題。特來和各位分享。1 乙個整數數列,元素取值可能是0 65535中的任意乙個數,相同數值不會重複出現。0是例外,可以反覆出現。請設計乙個演算法,當你從該數列中隨意選取5個數值,判斷這5個數值是否連續相鄰。注意 5個數值允許是亂序的。比如 8 7 5 0...