題目:輪轉數組
給定一個整數數組 nums,將數組中的元素向右輪轉 k 個位置,其中 k 是非負數。
示例1:
輸入: nums = [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:
輸入: nums = [-1,-100,3,99],k = 2
輸出: [3,99,-1,-100]
解釋:
向右輪轉 1 步: [99,-1,-100,3]
向右輪轉 2 步: [3,99,-1,-100]
解題思路1:
最終代碼:
void rotate(int* nums, int numsSize, int k)
{k = k % numsSize;while(k--){int temp = nums[numsSize-1];for(int i = numsSize-1;i>0;i--){nums[i] = nums[i-1];}nums[0] = temp;}
}
解題思路2:
最終代碼:
void revolve(int* nums,int left,int right)
{while(left<right){int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}
}void rotate(int* nums, int numsSize, int k)
{k = k % numsSize;revolve(nums,0,numsSize-1-k);revolve(nums,numsSize-k,numsSize-1);revolve(nums,0,numsSize-1);
}