山东省住房建设厅网站安全处,权威的唐山网站建设,代加工订单,深圳罗湖网站建设公司哪家好题目 给定一个整数数组 nums#xff0c;将数组中的元素向右轮转 k 个位置#xff0c;其中 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…题目 给定一个整数数组 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] 来源力扣LeetCode 链接https://leetcode.cn/problems/rotate-array 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 题解思路
使用额外的数组进行解决,这里关注一下 vecoter的assign的方法。使用数组翻转 ,先翻转整个数组然后翻转前k个再翻转后面的n-k个
代码
方法一
class Solution {
public:void rotate(vectorint nums, int k) {int n nums.size();vectorint newNums(n);for(int i0;in;i){newNums[(ik)%n] nums[i];}nums.assign(newNums.begin(),newNums.end());}
};方法二
class Solution {
public:void reverse(vectorint nums,int start,int end){while(startend){swap(nums[start],nums[end--]);}}void rotate(vectorint 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);}
};