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

 

转载于:https://www.cnblogs.com/jimmycheng/p/7503105.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值