菜鸟今天准备好好学习,开始刷题玩,先从简单的入手,拿起很久没有看的算法。
</pre><pre name="code" class="cpp">刚看了<a target=_blank href="http://weibo.com/julyweibo?s=6cm7D0" target="_blank" alt="研究者July" title="研究者July" style="text-decoration: none; color: rgb(0, 120, 182); border-color: rgb(210, 210, 210); font-size: 14px; line-height: 16px;">July</a>大神的博客,找了LeetCode上面的题练手
</pre><pre name="code" class="cpp">https://leetcode.com/problems/rotate-array/
</pre><pre name="code" class="cpp">反转的思想是,(0,1,2,3....n);
从第倒数第K位反转 那么先交换(0,n-k),再交换(n-k+1,n),最后交换(0,n)
</pre><pre name="code" class="cpp">class Solution
{
public:
void rotate(vector<int>& nums, int k);
void Swap(vector<int>& nums, int first, int end);
};
void Solution::Swap(vector<int>& nums, int first, int end)
{
while (first < end)
{
swap(nums[first++], nums[end--]);
}
}
void Solution::rotate(vector<int>& nums, int k)
{
if (nums.size() == 0) return;
k = k%nums.size();
if (k == 0) return;
Swap(nums, 0, nums.size() - k - 1);
Swap(nums, nums.size() - k, nums.size() - 1);
Swap(nums, 0, nums.size() - 1);
}