博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode中“移动零”题解-java
阅读量:3951 次
发布时间:2019-05-24

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

题目

  1. 移动零
    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]
说明:

必须在原数组上操作,不能拷贝额外的数组。

尽量减少操作次数。

题解

1、双指针

创建两个指针i和j,第一次遍历时,用指针j用来记录有多少非0元素,在每次遇到一个非0元素就将其往数组左边挪,j指针的下标指向了最后一个非0元素下标,第二次遍历时,起始位置从j开始,将剩下的元素全部置为0。

class Solution {
public void moveZeroes(int[] nums) {
if(nums==null) {
return; } //第一次遍历的时候,j指针记录非0的个数,只要是非0的统统都赋给nums[j] int j = 0; for(int i=0;i

2、快速排序

确定一个待分割的元素做中间点x,然后把所有小于等于x的元素放到x的左边,大于x的元素放到右边。
在此题中,用0当做这个中间点,把不等于0的放到中间点的左边(没说不能为负数,所以此处条件为不等于0),等于0的放到其右边。

class Solution {
public void moveZeroes(int[] nums) {
//两个指针i和j int i = 0, j = 0; if(nums == null) return; for(i=0; i < nums.length; i++){
//当前元素!=0,就把其交换到左边,等于0的交换到右边 if(nums[i] != 0){
int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; j++; } } }}

转载地址:http://owwzi.baihongyu.com/

你可能感兴趣的文章
JAVA系统属性之user.home
查看>>
Android代码截屏
查看>>
Android中打印代码的调用层次
查看>>
成功者十三个价值连城的习惯
查看>>
特别成功的人会做6件事
查看>>
Android: 用jni 获取MAC地址
查看>>
字符串列表的C语言实现:c_strlist
查看>>
客户沟通的方式:礼貌待客沟通方式,技巧推广沟通方式,个性服务沟通方式
查看>>
用弹性工作制留住员工
查看>>
知识=经验×反思2
查看>>
领导者如何发现关键问题
查看>>
学习无为领导力
查看>>
卓越领导看过程
查看>>
领导力与各种循环挑战
查看>>
达成谈判协议 - 避免操之过急
查看>>
销售人说话“十大忌”
查看>>
营销中的“战略非对称”
查看>>
android 如何开关Mediatek开发的Feature
查看>>
Android电话功能各部分深入探讨
查看>>
Android应用技巧总结
查看>>