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面试题 10.01. 合并排序的数组(C++)
#yyds干货盘点# LeetCode程序员面试金典:合并排序的数组