题目要求
给定义个数组nums,编写一个函数将所有的0移动到数组的末尾,同时保持非零元素的相对顺序
要求呈现的结果
为了完善代码的效果,检查实现效果的正确性,这边小编采用的是测试方法对问题进行分析
题目分析
在这道题中,咱们可以很形象的理解成,对一个数组进行整理,整理需要达到的效果呢就是0在后面,其他元素的相对位置不变并进行输出,好了,我们分析一下这个整理的过程需要怎么做
- 就像收拾房间一样,这个房间里面有东西我们才需要收拾,所以小编的第一步是先判断这个房间有没有东西。如果没有呢,就返回一个空,这样一来能够避免后续的无效移动。
- 形象的说的话,就像我们收拾家里卫生的时候,亟需摆放物品的位置有空地方我们会直接放上去,没有空地方我们会把暂时不需要的给安排到最受收拾,这边小编的思路也是这样的。
- 倘若数组前面的元素有零,我们可以把后面的非零元素给通过循环覆盖掉前面是0的元素
- 当然,我们同样需要把0给重新赋值到数组的尾部,这也仅仅需要一个循环来实现
- 为了看到代码的完整实现效果,这边小编会在方法最前面创建一个list集合,用来存储构造方法整理后的数组,就像我们收拾干净家里后拍照纪念一下
- 最后把list集合里的元素给重新还原给数组并返回,这就像是房间收拾好了,但是要给别人实时的展现出来,这个时候我们就可以一比一复刻一份,通过快递把这一份发送给想要让看到的人
好了,下面我们看一下小编是怎么收拾这个数组的 ``
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @program: src
* @description: 力扣283题 移动零的题目学习
* @create: 2022-10-10 13:15
**/
public class LeetCode283YiDongLing {
@Test
public void test(){
int[]nums = {0,3,0,5,60,6};
int[]newness = moveZeroes(nums);
System.out.println(Arrays.toString(newness));
}
public int[] moveZeroes(int[] nums) {
List<Integer> list = new ArrayList<>();
// 如果数组的长度为空,直接返回null
if (nums == null || nums.length == 0)
return null;
// 定义一个移动指针
int index = 0;
//一次遍历,把非零的都往前挪
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0)
nums[index++] = nums[i];
}
//后面的都是0,
while (index < nums.length) {
nums[index++] = 0;
}
// 把数组添加到list集合当中
for (int num : nums) {
list.add(num);
}
// 把集合中的元素转存到新的数组中并返回
int indexi = 0;
int []res = new int[list.size()];
for (Integer integer : list) {
res[indexi++] = integer;
}
return res;
}
}
好了,小编的题目分享就结束啦,总得来说思路和方法呢用的没有那么干练,接下来小编会减低代码的时间复杂度,分享其他的解题思路的,最后希望小编的思路对你的解题想法有帮助 ,在与算法相伴的生活里不枯燥。