1. 程式人生 > >刷爆LeetCode之旋轉陣列

刷爆LeetCode之旋轉陣列

旋轉陣列

給定一個數組,將陣列中的元素向右移動 個位置,其中 是非負數。

示例 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位.
	
		}
}