C語(yǔ)言-旋轉(zhuǎn)數(shù)組(多種方法去做)
#題目
給你一個(gè)數(shù)組,將數(shù)組中的元素向右輪轉(zhuǎn) k 個(gè)位置,其中 k 是非負(fù)數(shù)。
示例 1:
輸入: nums = [1,2,3,4,5,6,7], k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右輪轉(zhuǎn) 1 步: [7,1,2,3,4,5,6]
向右輪轉(zhuǎn) 2 步: [6,7,1,2,3,4,5]
向右輪轉(zhuǎn) 3 步: [5,6,7,1,2,3,4]
示例 2:
輸入:nums = [-1,-100,3,99], k = 2
輸出:[3,99,-1,-100]
解釋:?
向右輪轉(zhuǎn) 1 步: [99,-1,-100,3]
向右輪轉(zhuǎn) 2 步: [3,99,-1,-100]
提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105
進(jìn)階:
盡可能想出更多的解決方案,至少有 三種 不同的方法可以解決這個(gè)問(wèn)題。
你可以使用空間復(fù)雜度為 O(1) 的 原地 算法解決這個(gè)問(wèn)題嗎?
###代碼
1.犧牲空間法創(chuàng)建額外數(shù)組存儲(chǔ)
代碼:
void?rotate(int*?nums,?int?numsSize,?int?k){
????int?a[numsSize];
????int?i;
????for(i=0;i<numsSize;i++)
????{
????????a[(i+k)%numsSize]=nums[i];
????}
????for(i=0;i<numsSize;i++)
????{
????????nums[i]=a[i];
????}
}