[leetcode-283]Move Zeroes(java)
2015-09-24 20:57
567 查看
问题描述:
Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].
Note:
You must do this in-place without making a copy of the array.
Minimize the total number of operations.
分析:这里使用了两个索引,一个指向0,一个指向非0,二者分别向后遍历,当出现一对(0,非0)时,交换二者位置,这样当遍历到结束时,此时0也就被移动到了最后。因为每个节点最多被访问两次,所以时间复杂度为O(n).
代码如下:340ms
Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].
Note:
You must do this in-place without making a copy of the array.
Minimize the total number of operations.
分析:这里使用了两个索引,一个指向0,一个指向非0,二者分别向后遍历,当出现一对(0,非0)时,交换二者位置,这样当遍历到结束时,此时0也就被移动到了最后。因为每个节点最多被访问两次,所以时间复杂度为O(n).
代码如下:340ms
[code]public class Solution { public void moveZeroes(int[] nums) { int zeroIndex = 0; int nonZeroIndex = 0; int size = nums.length; while(zeroIndex<size && nonZeroIndex<size){ while(zeroIndex<size && nums[zeroIndex]!=0) zeroIndex++; while(nonZeroIndex < size && (nums[nonZeroIndex]==0 || nonZeroIndex<zeroIndex)) nonZeroIndex++; //swap the value if(zeroIndex<size && nonZeroIndex<size){ nums[zeroIndex++] = nums[nonZeroIndex]; nums[nonZeroIndex++] = 0; } } } }
相关文章推荐
- 安装APK的错误码(PackageManager.java)
- Java - 强引用、弱引用、软引用、虚引用
- Java的运行时数据存储机制
- Java的运行时数据存储机制
- java.lang.IllegalThreadStateException异常原因解析
- Java基础知识强化69:基本类型包装类之Character案例(统计字符串中大写小写以及数字的次数)
- 《Java编程思想》读书笔记3.操作符
- POJ 3318 Matrix Multiplication(JAVA生成随机数)
- Java基础知识强化68:基本类型包装类之Character概述和Character常见方法
- 注解驱动的springMVC与参数绑定
- Fork and Join: Java也可以轻松地编写并发程序
- 关于Java中的封装、多态、继承(1)
- [leetcode-284]Peeking Iterator(java)
- 3、下载与安装Eclipse
- JAVA类的方法调用和变量(全套)
- 用java制作简单登陆窗口,求大神教导
- Java垃圾回收机制
- ThreadPoolExecutor JDK线程池
- mybatis和spring整合的关键配置
- mybatis和spring整合的关键配置