人不走空
?个人主页:人不走空
?系列专栏:算法专题
⏰诗词歌赋:斯是陋室,惟吾德馨
目录
?个人主页:人不走空
?系列专栏:算法专题
⏰诗词歌赋:斯是陋室,惟吾德馨
题目
示例
示例1
示例2
提示
详细解读
idea上代码运行
作者其他作品:
题目
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例
示例1
输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例2
输入: nums =[0]
输出:[0]
提示
?️ 力扣原文
class Solution { public void moveZeroes(int[] nums) { if(nums == null){ return; } int j=0; for(int i=0;i<nums.length;i++){ if(nums[i] != 0){ nums[j++] = nums[i]; } } for(int i=j;i<nums.length;++i){ nums[i]=0; } }}
详细解读
这段代码实现了将数组中的所有零元素移动到数组末尾的操作,同时保持非零元素的相对顺序不变。下面是对代码的解释:
首先,检查输入的数组是否为空,如果为空,则直接返回,因为无需进行任何操作。
创建一个指针j
,初始化为0,用于记录非零元素应该放置的位置。
进行一次遍历数组。对于每个非零元素,将其放置到nums[j]
位置,并递增j
。
完成第一次遍历后,数组中所有的非零元素都已经按顺序移动到了数组的前部,而j
的值也指向了下一个可能为零的位置。
进行第二次遍历,从j
开始,将剩余的数组位置都置为零,以完成所有零元素的移动操作。
这段代码的时间复杂度为O(n),其中n是数组的长度,因为它只需要对数组进行两次遍历。
idea上代码运行
public class Main { public static void main(String[] args) { Solution solution = new Solution(); // 示例用例1 int[] nums1 = {0, 1, 0, 3, 12}; solution.moveZeroes(nums1); System.out.println("移动零后的数组1:"); for (int num : nums1) { System.out.print(num + " "); } System.out.println(); // 示例用例2 int[] nums2 = {0, 0, 0, 1, 2, 3}; solution.moveZeroes(nums2); System.out.println("移动零后的数组2:"); for (int num : nums2) { System.out.print(num + " "); } System.out.println(); }}
作者其他作品:
【Java】Spring循环依赖:原因与解决方法
OpenAI Sora来了,视频生成领域的GPT-4时代来了
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
【Java】深入理解Java中的static关键字
[Java·算法·简单] LeetCode 28. 找出字a符串中第一个匹配项的下标 详细解读
了解 Java 中的 AtomicInteger 类
算法题 — 整数转二进制,查找其中1的数量
. - 力扣(LeetCode)
Java企业应用软件系统架构演变史