概述
移动零
题目
移动零(力扣:283)
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
分析
使用双指针解决。
方法一:用2个指针i指向当前遍历的节点,j指向已排好序的当前非零节点的后一位。i指针位置的当前节点,如果是非零,则交换i和j的位置。
方法二:第一次遍历将非零节点都移动到数组的前面,并计算出非零节点的数量s,完成遍历后,第二次遍历从s开始一直到数组末尾,设置为0即可。
代码实现:方法一
/**
* 283. 移动零
* @param nums
*/
public void moveZeroes(int[] nums) {
if (nums == null){
return;
}
int i = 0, j = 0;
int tmp;
while (i <nums.length){
if (nums[i] != 0){
tmp = nums[j];
nums[j] = nums[i];
nums[i] = tmp;
j++;
}
i++;
}
}
代码实现:方法二
/**
* 283. 移动零
*
* @param nums
*/
public void moveZeroes2(int[] nums) {
if (nums == null || nums.length <= 1) {
return;
}
int s = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[s] = nums[i];
s++;
}
}
for (int i = s; i < nums.length; i++) {
nums[i] = 0;
}
}
最后
以上就是坦率人生为你收集整理的移动零(Java的2种算法实现)移动零的全部内容,希望文章能够帮你解决移动零(Java的2种算法实现)移动零所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复