#189 Rotate Array
問題描述:
可以想一下,k值只是中間一個分水嶺,k代表index[k]位置放入nums[0],一直往右到nums的最大index位置後,再從index[0]位置放num[i],舉例:以k=3為例,就是index[3]位置要放入原nums[0]。而index[4]位置 要放入原nums[1]。
a= [1,2,3,4,5,6,7] k = 3.
要輸出[5,6,7,1,2,3,4]
解題思路:
let a= [1,2,3,4,5,6,7]
k = 3.
we have to first reverse the whole array by swapping first element with the last one and so on.. you will get[7,6,5,4,3,2,1]
reverse the elements from 0 to k-1 reverse the elements 7,6,5 you will get [5,6,7,4,3,2,1]
reverse the elements from k to n-1 reverse the elements 4,3,2,1 you will get[5,6,7,1,2,3,4]
程式碼:
class Solution {
public void rotate(int[] nums, int k) {
if(nums == null || nums.length < 2){
return;
}
// This is to contain outOfBounds exception for K > nums.length , avoid K > nums.length
k = k % nums.length;
reverse(nums, 0, nums.length-1);
reverse(nums, 0, k-1);
reverse(nums, k, nums.length-1);
}
public void reverse(int[] arr, int start, int end){
int temp = 0;
while(start < end){
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
}
細節:
這裡爲何要做這是因為有可能發生 k > nums.length 的情況發生。如k=11, k%nums.length = 4 , k = 4
k %= nums.length;
Last updated
Was this helpful?