[Leetcode]Rotate Array java(三种)
2015-06-04 15:05
411 查看
首先注意题目是向右移
Method 1.申明额外空间 一直移位 进行旋转 代码就不给了会超时
Method 2. 交换 (不论是运用递归交换还是公约数进行移动交换)
这里用递归,主要是把要旋转的进行前后进行交换,不过会遇到前后数目不一样,所以交换完后需要递归下一次前后在进行交换直到交换的前后数目一样。
Method 3. 反转 可以自己举一个例子 先把要旋转的左右分别反转,再反转整个数组。
Method 1.申明额外空间 一直移位 进行旋转 代码就不给了会超时
Method 2. 交换 (不论是运用递归交换还是公约数进行移动交换)
这里用递归,主要是把要旋转的进行前后进行交换,不过会遇到前后数目不一样,所以交换完后需要递归下一次前后在进行交换直到交换的前后数目一样。
public void rotate(int[] nums, int k) { if (k >= nums.length) k = k % nums.length; if (k == 0 || nums.length == 0) return; int n = nums.length; int i = k; swap(nums, i, n - i, 0, n); } public void swap(int[] nums, int n, int i, int start, int end) { int temp = 0; if (n == i) { for (int j = 0; j < n; j++) { temp = nums[start + j]; nums[start + j] = nums[end - i + j]; nums[end - i + j] = temp; } } else if (n > i) { for (int j = 0; j < i; j++) { temp = nums[start + j]; nums[start + j] = nums[end - i + j]; nums[end - i + j] = temp; } swap(nums, n - i, i, start, end - i); } else if (i > n) { for (int j = 0; j < n; j++) { temp = nums[start + j]; nums[start + j] = nums[end - n + j]; nums[end - n + j] = temp; } swap(nums, n, i - n, start + n, end); } }
Method 3. 反转 可以自己举一个例子 先把要旋转的左右分别反转,再反转整个数组。
public void rotate(int[] nums, int k) { if(k>=nums.length) k=k%nums.length; if(k==0|| nums.length==0) return; reverse(nums, 0, nums.length-1-k); reverse(nums, nums.length-k, nums.length-1); reverse(nums, 0,nums.length-1); } public void reverse(int[] nums,int start,int end){ while(start<end){ int temp=nums[start]; nums[start]=nums[end]; nums[end]=temp; start++; end--; } }
相关文章推荐
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- service的发布与接收
- java-web开发乱码问题
- JAVA的abstract修饰符 && 接口interface用法 && 抽象类和interface的差别
- Java:自定义注解详解
- JFileChooser (Java Swing提供的文件选择对话框)
- java interface的学习
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- Java:元注解(Meta-Annotation)详解
- Dijkstra算法java实现
- Java传参带...的使用方式
- Java Thread.join详解
- myeclipse乱码问题
- 友盟分享图片到新浪微博报错:读取图片流出错java.net.MalformedURLException: Protocol not found:
- java常用日期类型转换
- Java swing实现Visio中对直线、曲线、折线的画及拖动删除
- java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String
- 通过逆向过程构建Springmvc+mybatis+maven+mysql
- java 多线程操作的管道流
- java格式化百分比