您的位置:首页 > 职场人生

面试_java:数组:旋转数组:rotate array(189)

2016-04-05 23:29 573 查看
{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
;
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
;

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;
}*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: