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:

  1. You must do this in-place without making a copy of the array.
  2. 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

 

posted @ 2017-09-11 04:39  Jimmy_Cheng  阅读(200)  评论(0编辑  收藏  举报