新網站建設咨詢seo網絡科技有限公司
題目
給定一個整數(shù)數(shù)組 nums,將數(shù)組中的元素向右輪轉 k 個位置,其中 k 是非負數(shù)。
示例 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]
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/rotate-array
著作權歸領扣網絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
題解思路
- 使用額外的數(shù)組進行解決,這里關注一下 vecoter的assign的方法。
- 使用數(shù)組翻轉 ,先翻轉整個數(shù)組,然后翻轉前k個,再翻轉后面的n-k個
代碼
方法一
class Solution {
public:void rotate(vector<int>& nums, int k) {int n = nums.size();vector<int> newNums(n);for(int i=0;i<n;i++){newNums[(i+k)%n] = nums[i];}nums.assign(newNums.begin(),newNums.end());}
};
方法二
class Solution {
public:void reverse(vector<int>& nums,int start,int end){while(start<end){swap(nums[start++],nums[end--]);}}void rotate(vector<int>& nums, int k) {int n = nums.size();k = k%n;reverse(nums,0,n-1);reverse(nums,0,k-1);reverse(nums,k,n-1);}
};