慘痛的回憶= =
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...