LeetCode 283. Move Zeroes (移动零)
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.
题目标签:Array, Two Pointers
题目给了我们一个nums array, 让我们把所有的0 都移动到最后面,保留其他数字的排序。
利用two pointers p1 和 p2, 基本思想是让p2停留在0的数字上,让p1找到不是0的数字,对换p1 p2的值。
遍历nums array,当遇到0的话,p1++;当遇到不是0的数字,对换p1 和 p2的值,p1++ p2++。
Java Solution:
Runtime beats 74.14%
完成日期:04/27/2017
关键词:Array, Two Pointers
关键点:找到不是0的数字,与0置换
1 public class Solution 2 { 3 public void moveZeroes(int[] nums) 4 { 5 int p1 = 0; // iterate each number 6 int p2 = 0; // stop at 0 7 8 while(p1 < nums.length) 9 { 10 if(nums[p1] != 0) // find the non-zero number 11 { 12 if(p1 != p2) // swap non-zero number with zero number 13 { // if p1 = p2, no need to swap 14 int temp = nums[p1]; 15 nums[p1] = nums[p2]; 16 nums[p2] = temp; 17 } 18 19 p2++; 20 } 21 22 p1++; 23 } 24 25 } 26 }
参考资料:N/A
LeetCode 算法题目列表 - LeetCode Algorithms Questions List