面试_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)
vector的写法
第一次: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; }*/
相关文章推荐
- 面试题28 字符串排列
- 【笔试/面试】SQL 经典面试题
- 摘抄-程序员如何写出杀手级的简历
- PHP新浪面试题及完整答案
- 面试题27 二叉搜索树与双向链表
- 陈皓:一个 fork 的面试题
- 一道JAVA面试,线程安全和静态内部类
- 面试题26 复杂链表的复制
- 数据库基本概念类 面试题
- [leetcode-328]Odd Even Linked List
- 码农小汪-设计模式之-策略模式
- Oralce数据库的优化(面试必问题)
- 让别人舒服的程度决定你路的高度
- 让别人舒服的程度,决定你路的宽度和高度
- 10道高频面试题整理~
- 结构体位制
- 一个程序员的孤独
- LeetCode(25)-symmetric tree
- 剑指offer面试题 求数组中只出现一次的数字
- [置顶] Android开发之数组类的面试题目,android工程师java程序员必备