题目链接:https://leetcode.cn/problems/move-zeroes/
两个限制条件:(1)原地排序(2)不改变原始相对顺序。由于结果数组保证如果存在0都在数组尾部,第一次循环只关注非零元素并直接赋值,最后将剩余的元素置为0即可。
class Solution {
public void moveZeroes(int[] nums) {
int j = 0;
//所有的非零元素直接赋值
for(int i=0;i<nums.length;i++) {
if(nums[i] != 0) {
nums[j++]=nums[i];
}
}
//剩余的直接设为0
for(int i=j;i<nums.length;i++) {
nums[j++] = 0;
}
}
}
该代码包含两个非嵌套的循环,因此时间复杂度为O(n),空间复杂度为O(1)。
本文提供了一种原地排序且保持非零元素相对顺序的解决方案,通过两次循环实现,确保所有非零元素被放置在数组的前面,并将剩余位置填充为0,满足题目要求的同时,达到了O(n)的时间复杂度和O(1)的空间复杂度。
273

被折叠的 条评论
为什么被折叠?



