問題描述:
給定乙個無序的陣列,求至少插入多少次可以使得這個陣列有序?
例如:5,1,2,3 經過一次插入 1,2,3,5
思路:其實只要保證原始陣列中最長的遞增的那些數字保持不動,其餘的數字依次插入即可。
因此該問題轉變成求最長遞增序列。
利用陣列,d[i]表示從位置0到位置i最長的遞增子串行的長度。
若ja[j],且初始d[i] < d[j]時,我們可以更新d[i]。
當a[i]>a[j],找到乙個最大的d[j]。d[i] =max(d[j]) + 1.
**:
1int f(int a, intn)2
16 d[i] = t + 1;17
}18 t = d[0
];19
for(int i = 1; i < n; i++)
2024
return n-t;
2526 }
微軟面試題
題目 小明和小強都是張老師的學生,張老師的生日是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小時...