刷爆LeetCode之旋轉陣列
阿新 • • 發佈:2018-12-11
旋轉陣列
給定一個數組,將陣列中的元素向右移動 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]
解題思路:
- 後移幾步則迴圈幾次
- 先把陣列中的最後一位記下
- 迴圈一遍,然後把陣列中的每一位後移一位
- 把之前記下的最後一位賦給空出來的第一位
- 這個程式碼測試例子中有一個數組長度是兩萬多的例子,用Java寫會時,所以用C語言寫會好一點。
程式碼如下:
void rotate(int* nums, int numsSize, int k) { int i=0; int j=0; for(i=0;i<k;i++) { //旋轉幾步就迴圈幾次 int e=nums[numsSize-1]; //先將陣列最後一位記下 for(j=numsSize-1;j>0;j--) { 將陣列中,從第0位開始每一位後移一位。 nums[j]=nums[j-1]; } nums[0]=e;然後把之前記下的最後與一位賦給第0位. } }