leetcode+面试:给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置

Posted Data+Science+Insight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode+面试:给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置相关的知识,希望对你有一定的参考价值。

给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置

leetcode+面试:给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置

 

示例:

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

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

 

说明:

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

2.尽量减少操作次数。

 

package leetCode01;

/**

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

* 说明:

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

* 2.尽量减少操作次数。

* @author 汤小萌

*

*/

public class Demo10 {

public void moveZeros(int[] nums) {

// 相当于定义了两个指针

int slow = 0, fast = 0;

while(fast < nums.length) {

if(nums[fast] != 0) {

nums[slow] = nums[fast];

slow++;

fast++;

} else { // 一旦这个数组上的数字是0,那么fast指针就需要往前走

// slow指针停留在0这个位置,在等待着fast发现了非0的数字将0位置的slow指针覆盖掉

fast++;

}

}

// slow跟fast相差了多少,就说明这个数组有多少个0,在上面填充完元素之后,

// 就需要将娄底漏掉的0补上

for(int i = slow; i < nums.length; i++) {

nums[i] = 0;

}

}

}

 

 

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

参考:leetcode

 

以上是关于leetcode+面试:给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 283. 移动零

LeetCode面试题 10.01. 合并排序的数组(C++)

#yyds干货盘点# LeetCode程序员面试金典:合并排序的数组

LeetCode面试题 16.17. 连续数列

Leetcode -面试题17.04.消失的数字 -189.轮转数组

#yyds干货盘点# LeetCode程序员面试金典:最小高度树