乙個長度為n的正整數序列,想要從裡面取出一段連續的長度大於等於k的序列。定義乙個序列的「中數」為最大的整數x,使得序列中至少一半的數字大於等於x,求這個取出來的序列的中數最大值?
滑動視窗的方式處理,獲取最大值、最小值作為中數左右邊界,然後取中間值,遍歷下標0-》k對應的資料判斷mid是否是中數(至少一半的數字大於等於mid),如果mid是中位數,則將中數最小值改為mid + 1,繼續遍歷陣列。如果不是中位數,從下標k開始繼續遍歷(維持)。如果mid是中位數,則將中數最小值改為mid + 1,否則中數最大值為mid -1,重新遍歷直到左右邊界重合。
經典演算法題 尋找最近的回文數
給定乙個整數 n 你需要找到與它最近的回文數 不包括自身 最近的 定義為兩個整數差的絕對值最小。示例 1 輸入 123 輸出 121 如果陣列的字串長度 1,數字n 1 開頭為1,9 9為乙個候選答案 例 100000,答案為99999 開頭為9,10 01為乙個候選答案 例 99999,答案為10...
演算法題 翻轉鍊錶中的一段
題目 給出乙個鍊錶中的兩個指標p1和p2,將其之間的結點翻轉。思路 可以通過交換結點內的值來實現結點的翻轉,空間為o n 如果要求不能交換值,那麼僅憑p1和p2是無法翻轉的,因為不知道p1之前的節點,會掉鏈,只能翻轉p1之後的鍊錶,這個過程就類似於給定乙個頭節點,翻轉之後的鍊錶了 可以使用頭插法。交...
前m大的數 (經典的思維題)
還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表,小希只想讓你把答案中最大的m個數告訴她就可以了。給定乙個包含n n 3000 個正整數的序列,每個數不超過5000,對它們兩兩相加得到的n n...