【Leetcode】Rotate Array
2015-12-06 23:06
411 查看
题目链接:https://leetcode.com/problems/rotate-array/
题目:
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array
rotated to
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Hint:
Could you do it in-place with O(1) extra space?
思路:
1、用另一个数组保存,空间复杂度为O(n),时间复杂度为O(n)
2、两边逆序,整个数组逆序。空间复杂度O(1),时间复杂度O(n)
3、数组平移,往右移动一个将覆盖的元素赋给最左开始的元素。空间复杂度为O(1),时间复杂度为O(n)
算法1:
算法2:
题目:
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.
Hint:
Could you do it in-place with O(1) extra space?
思路:
1、用另一个数组保存,空间复杂度为O(n),时间复杂度为O(n)
2、两边逆序,整个数组逆序。空间复杂度O(1),时间复杂度O(n)
3、数组平移,往右移动一个将覆盖的元素赋给最左开始的元素。空间复杂度为O(1),时间复杂度为O(n)
算法1:
public void rotate(int[] nums, int k) { if (k > nums.length) { k = k % nums.length; } int tmp[] = (int[]) nums.clone(); for (int i = 0; i < k; i++) { nums[i] = tmp[tmp.length - k + i]; } for (int i = 0; i < (tmp.length - k); i++) { nums[k + i] = tmp[i]; } }
算法2:
public void rotate(int[] nums, int k) { k = k % nums.length; nums = reverse(nums, 0, nums.length-k-1); nums = reverse(nums, nums.length-k,nums.length-1); nums = reverse(nums, 0, nums.length-1); } public int [] reverse(int[] arr, int left, int right){ if(arr == null || arr.length == 1) return arr; for(int i=0;i<(right-left+1)/2;i++){ int tmp = arr[left+i]; arr[left+i] = arr[right-i]; arr[right-i] = tmp; } return arr; }
相关文章推荐
- 鼠标悬浮tr追加背景颜色
- 二级指针的作用详解
- Android Support Design - TextInputLayout
- 通信领域当前的主流技术及社会需求调查报告
- android 的view类的setVisibility()
- 商品描述
- Speex回声消除代码分析
- 连载《一个程序猿的生命周期》- 42.一个时代有一个时代人的使命
- 测试管理-空降兵
- Arduino 平台与C语言程序设计-week3-Arduino Programs-Lesson3
- UVa 1595-对称轴
- 23种设计模式
- 【Linux编程】IO复用之poll详解
- IntelliJ IDEA 插件开发-Action,MessageBox,Log
- 让你的网站在移动端健步如飞
- 响应式编程Rxjava
- 2.运行你的App-Google官网上的Android初学训练
- 连载《一个程序猿的生命周期》- 41.一个时代有一个时代人的使命
- 一起学libcef--一个应用libcef的简单例子(windows程序)
- 链表反转的两种实现方法