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 @ 2019-07-30 11:26  天涯海角路  阅读(108)  评论(0)    收藏  举报