將包含 n 個元素的陣列向右旋轉 k 步。
例如,如果 n = 7 , k = 3,給定陣列[1,2,3,4,5,6,7],向右旋轉後的結果[5,6,7,1,2,3,4]。
可以每次將陣列中的元素右移一位,迴圈k次。由於向右旋轉位數k可能大於陣列元素個數n,所以通用的規律是:右移位數k=k%n。
假設乙個陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位。比較之後,不難看出,其中有兩段的順序是不變的:1234和abcd,可把這兩段看成兩個整體。右移k位的過程就是把陣列的兩部分交換一下。變換的過程通過以下步驟完成:
(1)逆序排列abcd:abcd1234 → dcba1234;
(2)逆序排列1234:dcba1234 → dcba4321;
(3)全部逆序:dcba4321 → 1234abcd。
再看乙個例子:向右旋轉k步,就把陣列中最後的k個元素按照原來的順序移到前面,把前面的移到後面。
cout << "請輸入旋轉步數:";
cin >> k;
k = k%n;
rotate(v, 3, 0, n-k-1);
rotate(v, 3, n - k, n - 1);//這是後面的k個元素
旋轉陣列相關問題
1.把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路 旋轉陣列有三種情況 1.array mid array high...
leedcode問題 旋轉陣列
給定乙個陣列,將陣列中的元素向右移動 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...
陣列 旋轉陣列的搜尋問題
旋轉陣列是指在原有順序陣列基礎上,以某個未知點進行了旋轉。以公升序陣列為例,其旋轉後有三種基本形態 見下圖,圖中虛線為陣列中心位置 情況一 未旋轉 情況二 旋轉點位於中心位置右側 情況三 旋轉點位於中心位置左側。利用二分法可以以o l ogn o logn o logn 的時間複雜度在旋轉陣列中進行...