轮转数组
思路:
1. 很暴力直接用取余的方式做。
开一个新的数组。
class Solution {
const int N = 1e5+10;
public:
void rotate(vector<int>& nums, int k) {
int n=nums.size();
int a[nums.size()];
for(int i=0;i<n;i++)
{
a[i]=nums[(i+(n<<3)-k)%n];
}
for(int i=0;i<nums.size();i++)
{
nums[i]=a[i];
}
}
};
法二:很巧妙的方法。
我们可以发现:
当我们将数组的元素向右移动 k 次后,尾部 k mod n 个元素会移动至数组头部,其余元素向后移动 k mod n 个位置。
太妙了啊。实际上一个序列翻转两次就和原始序列相同,所以整体翻转一次 使得两部分序列的位置到位,然后各部分再翻转一次,他们各自就和原始序列的排列相同了
原文地址:https://blog.csdn.net/weixin_66692283/article/details/140623898
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!