前言
刷题专栏到目前已经是第十九篇了,欢迎大家来关注我的刷题专栏,一起来刷题。
今天的这道题,依然是数组相关的题目,主要是数组元素的位置移动。
在很多的排序算法中会有相关的位置移动,大家如果没有思路可以去看一下。
下面我们就一起来看一下具体的题目解读吧。
算法题:移动零
从本道题的描述来看,是想将一个数组中的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; } } } } } }
代码执行结果
执行结果好惨,但总归是通过提交了。