OK啊兄弟们,今天我们来看一道非常经典的编程题,轮转数组。
题目链接如下:
轮转数组
题目分析
首先我们来看这道题目
很明显,其实我们这道题目是不太涉及什么复杂的算法的,甚至说就是一个纯粹的数学问题。
明白了这一点之后,我们就能很好的以一个小白的视角来看待这些题了。
ok在我们仔细的寻找下,我们可以发现每当轮转一次,给定数组的最后一个元素就会变成轮转后的第一个元素,而其他数组的索引往后排一位,那么根据这个,我们就可以通过它的索引的规律入手进行求解:
每当轮转一次,最后一个元素的索引应该都变为1,其他元素都后退一位。
以下是示例代码。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n =nums.size();
vector<int> num1(n);
for (int i = 0;i<n;i++)
{
num1[(i+k)%n] = nums[i];
}
nums.assign(num1.begin(),num1.end());
}
};
这种方法为官方题解,也与我的想法不谋而合,在处理这种题目的时候,有一个清醒且灵活的头脑是比较重要的,题目难度并不大,但感觉是比较经典的,可以好好总结一下。
就这样,Respect。