2.優化解法
3.翻轉解法
旋轉陣列
給定乙個陣列,將陣列中的元素向右移動 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
]
說明:
主要思路:把原陣列從倒數第k個元素一分為2,分ab兩份存在單獨的陣列裡面;之後,再以ba的順序存放在元素組。
原陣列:[1,
2,3,
4,5,
6,7] k=
41分為2儲存:a:[1
,2,3
] b:[4
,5,6
,7]以ba的順序放回原陣列:[4,
5,6,
7,1,
2,3]
注意:這種做法比較暴力,雖然通過了但是不滿足題目的空間複雜度要求。
時間複雜度:o(n) n是陣列長度
空間複雜度:o(n) n是陣列長度,單獨申請了空間
public
void
rotate
(int
nums,
int k)
for(
int j =
0; j < right.length; j++
)int n =0;
for(
; n < right.length; n++
)for
(int j =
0; j < left.length; j++
)}
主要思路:用到的隱含條件,原陣列第i個元素放到新陣列第(i+k)%len的位置。
原陣列:[1,
2,3,
4,5,
6,7] k=
4第0個元素1,存放新陣列的index:
4第1個元素2,存放新陣列的index:
5第2個元素3,存放新陣列的index:
6第3個元素4,存放新陣列的index:
0第4個元素5,存放新陣列的index:
1第5個元素6,存放新陣列的index:
2第6個元素7,存放新陣列的index:
3新陣列:[4,
5,6,
7,1,
2,3]
時間複雜度:o(n) n是陣列長度
空間複雜度:o(n) n是陣列長度,單獨申請了空間
public
void
rotate
(int
nums,
int k)
system.
arraycopy
(newarr,
0, nums,
0, len)
;}
主要思路:把原陣列翻轉,之後把前k個和後len-k個分別翻轉;
原陣列:[1,
2,3,
4,5,
6,7] k=
4整體翻轉後:[7,
6,5,
4,3,
2,1]
第4個元素之前的元素翻轉,以及第4個元素之後的元素分別翻**[4,
5,6,
7,1,
2,3]
注意:k的值有可能大於陣列長度,所以需要k對陣列長度取模,保證k值在len範圍之內;
時間複雜度: o(n)
空間複雜度: o(1)
public
void
rotate
(int
nums,
int k)
void
reversearr
(int
nums,
int start,
int end)
}
LeetCode 陣列 旋轉陣列
給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 輸入 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 ...
搜尋旋轉陣列
假設有乙個排序的按未知的旋轉軸旋轉的陣列 比如,0 1 2 4 5 6 7 可能成為4 5 6 7 0 1 2 給定乙個目標值進行搜尋,如果在陣列中找到目標值返回陣列中的索引位置,否則返回 1。你可以假設陣列中不存在重複的元素。直接的方法是順序搜尋 更好的方法是二分搜尋 public class s...
LeetCode 旋轉陣列
將包含n 個元素的陣列向右旋轉 k 步。例如,如果 n 7 k 3,給定陣列 1,2,3,4,5,6,7 向右旋轉後的結果為 5,6,7,1,2,3,4 注意 盡可能找到更多的解決方案,這裡最少有三種不同的方法解決這個問題。要求空間複雜度為 o 1 關聯的問題 反轉字串中的單詞 ii public ...