{1,2,3,4,5};k=2旋转
第一次:5,4,3,2,1
第二次:4,5,3,2,1
第三次:4,5,1,2,3复杂度:O(N)
import java.util.HashMap;
import java.util.Scanner;
public class Solution {
public int[] rotate(int[] numbers,int k){
if(numbers.length ==0 || k%numbers.length==0)
return numbers;
k = k % numbers.length;
reverse(numbers,0, numbers.length-k-1); //反转整个数组
reverse(numbers,numbers.length-k,numbers.length-1); //反转k个
reverse(numbers,0,numbers.length-1); //反转剩下的数组
return numbers;
}
public void reverse(int[] A, int start,int end){
while(start < end){
//交换start和end
int temp=A[start];
A[start] =A[end];
A[end] = temp;
++start;
--end;
}
}
public static void main(String[] args) {
Solution s = new Solution();
//输入
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
int n = cin.nextInt();
int[] numbers = new int[n];
for (int i = 0; i < numbers.length; ++i) {
numbers[i] = cin.nextInt();
}
int k = cin.nextInt();
//算法
int[] res = s.rotate(numbers, k);
//输出
for(int r:res)
System.out.println(r+"\t");
}
}
}
c++
// 单纯数组的输入输出
#include <iostream>
using namespace std;
#define N 100
class Solution {
private:
void reverse_array(int nums[], int a, int b) {
while (a < b) {
swap(nums[a], nums[b]);
++a;
--b;
}
}
public:
void rotate(int nums[], int n,int k) {
if (n == 0 || k % n == 0)
return;
k = k % n;
reverse_array(nums, 0, n - k - 1);
reverse_array(nums, n - k, n - 1);
reverse_array(nums, 0, n - 1);
}
};
int main() {
Solution s;
int n;
int test[N];
cin>>n;
memset(test,0,sizeof(test));
for(int i=0;i<n;i++)
cin>>test[i];
int k; //旋转的个数
cin>>k;
s.rotate(test,n,k);
//输出
for (int i = 0; i < 5; ++i)
cout << test[i] << ' ';
cout << endl;
return 0;
}
/*
int main() {
int num[] = {1, 2, 3, 4, 5};
Solution s;
s.rotate(num, 5, 3);
for (int i = 0; i < 5; ++i)
cout << num[i] << ' ';
cout << endl;
return 0;
}*/
- vector的写法
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
#define N 100
class Solution {
private:
void reverse_array(vector<int> &nums, int a, int b) {
while (a < b) {
swap(nums[a], nums[b]);
++a;
--b;
}
}
public:
void rotate(vector<int>& nums, int k) {
int n=nums.size();
if (n == 0 || k % n == 0)
return;
k = k % n;
reverse_array(nums, 0, n - k - 1);
reverse_array(nums, n - k, n - 1);
reverse_array(nums, 0, n - 1);
}
};
int main() {
Solution s;
vector<int> testRotateArray;
int n,t;
cin>>n;
while(n--){
cin>>t;
testRotateArray.push_back(t);
}
int k; //旋转的个数
cin>>k;
s.rotate(testRotateArray,k);
//输出
for(vector<int>::iterator it=testRotateArray.begin(); it!=testRotateArray.end();it++)
cout<<*it<<endl;
return 0;
}
/*
int main() {
int num[] = {1, 2, 3, 4, 5};
Solution s;
s.rotate(num, 5, 3);
for (int i = 0; i < 5; ++i)
cout << num[i] << ' ';
cout << endl;
return 0;
}*/