面试_java:数组:旋转数组:rotate array(189)
来源:互联网 发布:加强校园网络建设 编辑:程序博客网 时间:2024/06/05 02:30
{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 100class 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 100class 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;}*/
0 0
- 面试_java:数组:旋转数组:rotate array(189)
- Rotate Array数组旋转
- LeetCode 189 Rotate Array(旋转数组)
- LeetCode 189 Rotate Array(旋转数组)
- leetcode:Rotate Array旋转数组
- Rotate Array 数组的旋转
- 【LeetCode】Rotate Array 旋转数组
- Rotate Array 数组旋转 leetcode
- leetcode Rotate Array 旋转数组
- [C++]Rotate Array 旋转数组
- Rotate Array 部分旋转数组
- 189. Rotate Array 旋转数组
- 189. Rotate Array 旋转数组
- 【LeetCode-面试算法经典-Java实现】【189-Rotate Array(旋转数组)】
- 字符串,数组旋转问题-leetcode 189 Rotate Array
- LeetCode Rotate Array(数组的旋转)
- LeetCode 189. Rotate Array(旋转数组)
- leetcode 189. Rotate Array-旋转数组
- ease.js "Uncaught Ticker cannot be instantiated."
- 022 Generate Parentheses
- 链表的反转
- bzoj3209 花神的数论题
- 获取Android手机中所有短信的实现代码
- 面试_java:数组:旋转数组:rotate array(189)
- 【python】numpy,scipy,pandas资源列表
- 手机序列号和设备标识UDID码手机直接获取方式:
- sort 函数
- vagrant系列一:vagrant的安装与初识
- Markdown语法
- relativePath.php
- Coco2d Physics 物理引擎
- Task和Back Stack