給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。
示例 1:
輸入: [1,2,3,4,5,6,7] 和 k = 3
輸出: [5,6,7,1,2,3,4]
解釋:向右旋轉 1 步: [7,1,2,3,4,5,6]
向右旋轉 2 步: [6,7,1,2,3,4,5]
向右旋轉 3 步: [5,6,7,1,2,3,4]
示例 2:
輸入: [-1,-100,3,99] 和 k = 2
輸出: [3,99,-1,-100]
解釋:向右旋轉 1 步: [99,-1,-100,3]
向右旋轉 2 步: [3,99,-1,-100]
說明:
盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。
要求使用空間複雜度為 o(1) 的 原地 演算法。
思路一:
暴力解法,直接將陣列旋轉k次,第一層迴圈執行k次旋轉,第二層迴圈控制陣列中所有元素位移。
參考leetcode官方解題思路:鏈結。
class
solution}}
}
思路二:
可以用乙個額外的陣列來將每個元素放到正確的位置上,也就是原本陣列裡下標為 i 的我們把它放到 (i+k)%陣列長度 的位置。然後把新的陣列拷貝到原陣列中。
參考leetcode官方解題思路:鏈結。
public
class
solution
for(
int i =
0; i < nums.length; i++)}
}
演算法學習 FHQ Treap (無旋Treap)
fhq treap和普通的treap都是乙個二叉搜尋堆,其同時滿足二叉樹的性質 左子樹的權值小於等於當前節點權值,右子樹權值大於當前節點權值 和堆的性質 對於小根堆,當前節點的優先順序是堆中最小的 fhq treap與一般的treap的不同之處主要在於 不用旋轉,用split和merge來為維護堆的...
演算法學習 Fhq Treap(無旋Treap)
treap 大名鼎鼎的隨機二叉查詢樹,以優異的效能和簡單的實現在oier們中廣泛流傳。這篇blog介紹一種不需要旋轉操作來維護的treap,即無旋treap,也稱fhq treap。它的巧妙之處在於只需要分離和合併兩種基本操作,就能實現任意的平衡樹常用修改操作。而不需要旋轉的特性也使編寫 時不需要考...
演算法學習記錄
排序演算法複雜度 層序遍歷 雙端佇列 演算法流程 特例處理 當樹的根節點為空,則直接返回空列表 初始化 列印結果空列表 res 包含根節點的雙端佇列 queue bfs 迴圈 當 queue 為空時跳出 新建列表 temp 用於臨時儲存當前層列印結果 當前層列印迴圈 迴圈次數為當前層節點數 即 qu...