Leetcode题目-283-moveZeroes
题目:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
答题解析
思路:
1.遍历一维数组,判断该位数是否为零。
2.移动非零数字。
代码1
public void moveZeroes(int[] nums) {
#定义数组的长度len
int len = nums.length;
#记录下一个填入的非零元素的位置
int next = 0;
#判例,当数组长度为1,直接输出数组。
if (len < 2) {
return;
}
#遍历数组
for (int i = 0; i < len; i++) {
#判断是否非零
if (nums[i] != 0) {
#如果是非零,将其填入下一个非零元素,指针为next
nums[next] = nums[i];
#指针next自加
next++;
}
}
#将剩余的位置填上零
for (int i = next; i < len; i++) {
nums[i] = 0;
}
}
}
代码2
class solution{
public void moveZeroes(int[] nums){
#记录下一个填入的非零元素的位置
int next = 0;
#遍历数组
for(int i =0 ;i<nums.length;i++){
#判断遍历到的num[i]是否非零
if(nums[i] != 0 ){
#如果是,将其记录,指针为next
nums[next] = nums[i];
#判断i是否与next相同
if(i != next){
#如果是,将遍历到的位赋为0
nums[i] = 0;
}
#next指针自增
next++;
}
}
}
}
复杂度
时间复杂度位O(n)
空间复杂度位O(n)