博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
283. Move Zeroes
阅读量:6952 次
发布时间:2019-06-27

本文共 1495 字,大约阅读时间需要 4 分钟。

一、题目

  1、审题

  

 

  2、分析

    给出一个整形数组,将 0 全部提到后边,并保持非 0 元素的排列顺序。

 

二、解答

  1、思路

    方法一、

      采用两个指针,index1 指向 第一个 0 的下标。i 指向新出现的元素的下标。

      若 nums[i] = 0,则 i++;

      若 nums[i] != 0, 且 i != index1,则交换 i 与 index1 所指向的两个元素值;且 index1++,i++;

      最终结果为,将出现的 0 连起来,将后边的非 0 元素与前边的 0 序列的最前头一个进行交换。

public void moveZeroes(int[] nums) {        int len = nums.length;        int ind1 = 0;        for (int i = 0; i < len; i++) {            if(nums[i] == 0) {                if(nums[ind1] != 0)                    ind1 = i;                continue;            }                        if(i > ind1 && nums[ind1] == 0) {                swap(nums, ind1, i);                ind1++;            }        }    }    private void swap(int[] nums, int i, int j) {        int tmp = nums[i];        nums[i] = nums[j];        nums[j] = tmp;    }

 

  方法二、

    改进:

    最终结果为,非0数全在前边, 0 在后边。

public void moveZeroes3(int[] nums) {        int j = 0;        for (int i = 0; i < nums.length; i++) {            if(nums[i] != 0) {                if(i != j)                    swap(nums, i, j);                j++;            }        }    }

 

  方法三、

    新建变量 insertPos=0; 将非 0 元素直接前移到 insertPos 位置,然后 insertPos++;

    最终若 insertPos < len;在将剩下的元素赋值 0;

public void moveZeroes2(int[] nums) {        int insertPos = 0;        for(int num: nums)            if(num != 0)                nums[insertPos++] = num;        while(insertPos < nums.length)            nums[insertPos++] = 0;    }

 

转载于:https://www.cnblogs.com/skillking/p/10009801.html

你可能感兴趣的文章
类和对象
查看>>
Django框架 之 ORM中介模型
查看>>
分布式缓存MemcacheHelper
查看>>
清闲逛论坛,发个我们团队常用的开发资源整理,跟兄弟们共享
查看>>
lex&yacc 9
查看>>
Anaconda 安装 OpenCV 遇到的问题
查看>>
set 集合容器实现元素的插入与中序排序
查看>>
最常使用Eclipse快捷键
查看>>
jmeter的如何设置headers
查看>>
ssh免密登入
查看>>
拖拽文件作为文件输入
查看>>
Eclipse设置智能提示
查看>>
HTML-CSS线性渐变
查看>>
SAP 生产订单变更管理 OCM Order Changement Management
查看>>
虚拟化这八年-【软件和信息服务】2014.11
查看>>
【转】SVM算法的生动讲解
查看>>
使用swfupload上传超过30M文件,使用FLASH上传组件
查看>>
OkHttp简介
查看>>
如何使用通用Mapper
查看>>
MYSQL建表语法(主键,外键,联合主键)
查看>>