leetcode中MoveZeroes问题1ms→0ms
2015-12-01 19:22
507 查看
今天刚开始刷leetcode,做到MoveZeroes问题时运行的结果一直是1ms,但是看数据统计有6%的人是0ms。试了很多种办法均无果,最后看了discuss里人家个的答案才发现原来只是细节问题。
我的代码(1ms):
别人的代码(0ms):
只是把’index++‘放到了中括号里面,但是速度确实比第一种快一些。
另外自己用分治写的代码,也能达到线性时间的运行速度:
我的代码(1ms):
public class Solution { public void moveZeroes(int[] nums) { int index= 0; for(int i = 0; i < nums.length; i++){ if(nums[i] != 0){ nums[index]= nums[i]; index++; } } for(;index<nums.length; index++){ nums[index] = 0; } } }
别人的代码(0ms):
public class Solution { public void moveZeroes(int[] nums) { if(nums==null || nums.length==0) return; int index=0; for(int i=0; i<nums.length; i++){ if(nums[i]!=0) nums[index++] = nums[i]; } for(int i=index; i<nums.length; i++){ nums[i]=0; } } }
只是把’index++‘放到了中括号里面,但是速度确实比第一种快一些。
另外自己用分治写的代码,也能达到线性时间的运行速度:
public class Solution { public void moveZeroes(int[] nums) { moveZero(nums,0,nums.length); } private int moveZero(int[]a,int left,int right){ if(left==right){ return a[left]==0?1:0; } int mid=(left+right)/2; int x=moveZero(a,left,mid); int y=moveZero(a,mid+1,right); if(x==0){ return x+y; } mid++; for(;mid+y-1!=right;mid++){ a[mid-x]=a[mid]; a[mid]=0; } return x+y; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统