旋轉陣列20210108

2021-10-14 06:05:30 字數 2435 閱讀 3391

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 ...