以[1,2,3,4,5,6,7]和k=3为例,处理之后的答案为[5,6,7,1,2,3,4],对该答案反转可以得到[4,3,2,1,7,6,5]。观察可知,相当于把原先的元素根据K值大小分为二段,分别反转,之后再把整个数组反转即可。
且元素的移动是有周期的,周期即为数组的长度。针对k值大于数组元素个数的情况,可以先进行一个模运算。
class Solution {
public:
void rotate(vector<int>& nums, int k)
{
k=k%nums.size();
reverse(nums,0,(nums.size()-k-1));
reverse(nums,nums.size()-k,nums.size()-1);
reverse(nums,0,nums.size()-1);
}
void reverse(vector<int>& nums,int begin,int end)
{
while(begin<end)
{
int temp=nums[begin];
nums[begin]=nums[end];
nums[end]=temp;
begin++;
end--;
}
}
};
本文介绍了一种数组旋转算法的实现方法,通过三次反转操作达到指定元素旋转k位的效果,并附带了C++代码实现。该算法适用于解决数组中元素按特定数值旋转的问题。
714

被折叠的 条评论
为什么被折叠?



