持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
前言
刷题专栏到目前已经是第十九篇了,欢迎大家来关注我的刷题专栏,一起来刷题。
今天的这道题,依然是数组相关的题目,主要是数组元素的位置移动。
在很多的排序算法中会有相关的位置移动,大家如果没有思路可以去看一下。
下面我们就一起来看一下具体的题目解读吧。
算法题:移动零
从本道题的描述来看,是想将一个数组中的0,后移到尾部位置。
比如示例中的nums = [0,1,0,3,12], 然后最后的预期结果变成[1,3,12,0,0]
一般要处理这种情况,只需要利用排序算法来进行元素的移动即可。
但是这里有一个特殊的情况,那就是只是将0后移到最后,我们就可以不用置换元素了。
可以直接去覆盖0即可。
在每次遍历到0的时候,只需要去通过二重循环来获取下一个不为0的数字元素即可。
然后将不为0的数字元素赋值到当前索引值下。
然后在将原有数字赋值为0。
以此就能达到预期的效果了,接下来看一下具体代码吧。
代码展示
代码没有选择直接移动,而是直接去获取了0后面的非0元素。
代码如下,大家可以自行去试一下。
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
int[] nums = new int[]{0,1,0,3,12};
solution.moveZeroes(nums);
System.out.println(Arrays.toString(nums));
}
public void moveZeroes(int[] nums) {
for (int i = 0; i < nums.length; i++) {
if(nums[i] == 0){
int index = i + 1;
while (index < nums.length){
int n = nums[index];
if(n == 0){
index++;
}else{
nums[i] = n;
nums[index] = 0;
break;
}
}
}
}
}
}
代码执行结果
执行结果好惨,但总归是通过提交了。