题目
给定一个整数数组
nums
,将数组中的元素向右轮转k
个位置,其中k
是非负数难度:中等
题目链接:189. 轮转数组
示例 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 <= nums.length <= 10^5
-2^31 <= nums[i] <= 2^31 - 1
0 <= k <= 10^5
代码展示
void reverse_num(int* left,int* right)
{
while(left<right)
{
int t = *left;
*left = *right;
*right = t;
left++;
right--;
}
}
void rotate(int* nums, int numsSize, int k){
k%=numsSize;
reverse_num(nums,nums+numsSize-1);
reverse_num(nums,nums+k-1);
reverse_num(nums+k,nums+numsSize-1);
}
题目解析
核心思想 : 逆置数组文章来源:https://www.toymoban.com/news/detail-733791.html
- 先逆置全部数组
- 再把右旋过去的数组逆置一下
- 最后把剩下部分数组也逆置一下
详细图解
文章来源地址https://www.toymoban.com/news/detail-733791.html
到了这里,关于Leetcode:【189. 轮转数组】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!