LintCode之移动零

题目描述:

 

分析:由于要使非零元素保持原数组的顺序,我只能想出在找到一个0时,逐个移动数组元素使得后一个元素覆盖前一个元素,再将这个0移到后头去。

我的代码:

 1 public class Solution {
 2     /*
 3      * @param nums: an integer array
 4      * @return: 
 5      */
 6     public void moveZeroes(int[] nums) {
 7         // write your code here
 8         //当数组为空时直接返回
 9         if(nums.length == 0) {
10             return;
11         }
12         boolean b = true;
13         //判断数组是否全为0,若是,则直接返回
14         for(int i=0; i<nums.length; i++) {
15             if(nums[i] != 0) {
16                 b = false;
17             }
18         }
19         if(b == true) {
20             return ;
21         }
22         
23         int k = nums.length-1;
24         int i = k;
25         while(i >= 0) {
26             //从后往前找元素值为0的数
27             while(i>=0 && nums[i]!=0) {
28                 i--;
29             }
30             if(i >= 0) {
31                 int temp = nums[i];
32                 for(int j=i; j<k; j++) {
33                     nums[j] = nums[j+1];
34                 }
35                 nums[k] = temp;
36                 k--;
37             }
38         }
39     }
40 }

 

转载于:https://www.cnblogs.com/zwxblog/p/7794936.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值