深入解析:【代码】(LeetCode 面试经典 150 题 ) 189. 轮转数组(字符串、双指针)

题目:189. 轮转数组

在这里插入图片描述

思路:移动k次,等价于移动 k%n次,那就是最后面的k个字符会被放置在最前面。
将字符串nums翻转,那么就可以将后面k个字符放置在最起码,但是两边的字符串都乱序了。两边再翻转一次就正序了。细节看源码,时间复杂度0(n)。

字符串翻转,用双指针即可实现,Java版本题解有。

C++版本:

class Solution
{
public:
void rotate(vector<
int>
& nums, int k) {
int n=nums.size();
k%=n;
reverse(nums.begin(),nums.end());
reverse(nums.begin(),nums.begin()+k);
reverse(nums.begin()+k,nums.end());
}
};

JAVA版本:

class Solution
{
void reverse(int[] nums,int l,int r){
while(l<r){
int tmp=nums[l];
nums[l]=nums[r];
nums[r]=tmp;
l++;
r--;
}
}
public void rotate(int[] nums, int k) {
int n=nums.length;
k%=n;
reverse(nums,0,n-1);
reverse(nums,0,k-1);
reverse(nums,k,n-1);
}
}

Go版本:

func rotate(nums []int, k int) {
n:=len(nums)
k%=n
slices.Reverse(nums)
slices.Reverse(nums[:k])
slices.Reverse(nums[k:])
}
posted @ 2025-07-26 15:06  yfceshi  阅读(7)  评论(0)    收藏  举报