首页 > 学院 > 开发设计 > 正文

leecode 解题总结:189. Rotate Array

2019-11-08 01:00:09
字体:
来源:转载
供稿:网友
#include <iostream>#include <stdio.h>#include <vector>#include <string>using namespace std;/*问题:Rotate an array of n elements to the right by k steps.For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].Note:Try to come up as many solutions as you can, there are at least 3 different ways to solve this PRoblem.[show hint]Related problem: Reverse Words in a String II分析:等于将数组最右侧的元素旋转k次。记得之前有一种旋转ab要旋转为ba,a旋转变成A,b旋转变成b,ba=(a-1 b-1)-1,旋转两部分,等于先各自将两部分各自旋转,然后整体旋转k = k % n,将倒数k个元素1 2 3 4 5 6 7各自旋转4 3 2 1 7 6 5整体旋转5 6 7 1 2 3 4 输入:7(数组元素个数) 3(旋转k次)1 2 3 4 5 6 77 101 2 3 4 5 6 77 71 2 3 4 5 6 7输出:5 6 7 1 2 3 45 6 7 1 2 3 41 2 3 4 5 6 7*/class Solution {public:    void rotate(vector<int>& nums, int k) {        if(nums.empty() || k < 0)		{			return;		}		int size = nums.size();		k = k % size;		if(0 == k)		{			return;		}		//将0到n-k-1旋转,将n-k到n-1旋转,最后一个数取不到		reverse(nums.begin() , nums.begin() + size - k);		reverse(nums.begin() + size - k , nums.end());		reverse(nums.begin() , nums.end());    }};void print(vector<int>& result){	if(result.empty())	{		cout << "no result" << endl;		return;	}	int size = result.size();	for(int i = 0 ; i < size ; i++)	{		cout << result.at(i) << " " ;	}	cout << endl;}void process(){	 vector<int> nums;	 int value;	 int num;	 Solution solution;	 vector<int> result;	 int k;	 while(cin >> num >> k)	 {		 nums.clear();		 for(int i = 0 ; i < num ; i++)		 {			 cin >> value;			 nums.push_back(value);		 }		 solution.rotate(nums , k);		 print(nums);	 }}int main(int argc , char* argv[]){	process();	getchar();	return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表