文档章节

移动0 Move Zeroes

叶枫啦啦
 叶枫啦啦
发布于 2017/05/22 22:04
字数 353
阅读 2
收藏 0

题目:

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.

解决:

①我首先想到的是先计算0的数目num,然后非0的数向前移动num个位置即可。耗时0 ms

public class Solution {
    public void moveZeroes(int[] nums) {//注意返回值是void
        int num = 0;
        for(int i = 0; i < nums.length; i ++){
            if(nums[i] == 0){
                num ++;
            }else{
                nums[i - num] = nums[i];
            }
        } 
        while(num > 0){
            nums[nums.length - num ] = 0;
            num --;
        }
    }
}

②另一种方法,类似于冒泡排序,将第一个0不断的与之后的第一个非0交换位置,从而将0 全部移到后面的位置。

public class Solution {
    public void moveZeroes(int[] nums) {
        int pivot = -1; //记录下第一个0的位置
        
        for(int i = 0;i < nums.length-1;i ++){
            if(nums[i] == 0){
                if(pivot == -1){
                    pivot = i;
                }
                if(nums[i + 1] != 0){
                    nums[pivot] = nums[i+1];
                    nums[i + 1] = 0;
                    pivot ++;
                }
            }
        }
    }
}

③ 直接将非0的数向前移,很多时候查找非0时更方便一些

public class Solution {
    public void moveZeroes(int[] nums) {
        int pivot = -1;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                nums[++pivot] = nums[i];
            }
        }
        for (int j = pivot + 1; j < nums.length; j++) {
            nums[j] = 0;
        }
    }
}

© 著作权归作者所有

叶枫啦啦
粉丝 14
博文 583
码字总数 400448
作品 0
海淀
私信 提问
LeetCode:Move Zeroes - 将数组中的0移到最后

1、题目名称 Move Zeroes(将数组中的0移到最后) 2、题目地址 https://leetcode.com/problems/move-zeroes 3、题目内容 英文:Given an array nums, write a function to move all 0's to ......

北风其凉
2015/09/20
1K
0
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......

Leafage_M
2017/12/09
0
0
【Leetcode】【简单】【283. 移动零】【JavaScript】

题目描述 283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,...

孙达
09/08
0
0
283. Move Zeroes - LeetCode

Question 283. Move Zeroes Solution 题目大意:将0移到最后 思路: 1. 数组复制2. 不用数组复制 Java实现: 数组复制 不用数组复制

yysue
2018/08/05
15
0
LeetCode:Set Matrix Zeroes - 将矩阵内含有零的行和列全部置零

1、题目名称 Set Matrix Zeroes(将矩阵内含有零的行和列全部置零) 2、题目地址 https://leetcode.com/problems/set-matrix-zeroes/ 3、题目内容 英文:Given a m x n matrix, if an eleme...

北风其凉
2015/11/07
343
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部