字符串旋转

菜鸟今天准备好好学习,开始刷题玩,先从简单的入手,拿起很久没有看的算法。
</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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值