LeetCode 75 - 每日一题
283. 移动零 - 力扣(LeetCode)
题目描述
给定一个数组,将0元素移动到数组末尾,其他元素保持相对顺序。要求不能引入额外的空间。
思路
- 要求不能使用额外的空间,即对原数组进行修改
- 双指针,一个nonZero指针用于指向非0元素的存储下标, 一个i指针遍历数组找出非0元素。找到非0元素存就行了。
- 之后对剩余元素补0.
▼java复制代码class Solution { public void moveZeroes(int[] nums) { int nonZero = 0; // 将所有非零元素前移 for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { nums[nonZero++] = nums[i]; } } // 将剩余位置填充为零 for (int i = nonZero; i < nums.length; i++) { nums[i] = 0; } } }
优化写法
- 使用双指针 + 交换
- 一个nonZero 指针 指向非0元素存储的下标。
- 一个i指针,从前向后遍历找出非0元素
- 两个指针值交换,交换后给当前元素赋值为0,因为当前的值已经移动到前面了,该位置就是空的也就是0
▼java复制代码class Solution { public void moveZeroes(int[] nums) { int nonZero = 0; // 记录下一个非零元素应该放置的位置 for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { // 交换当前元素和nonZero位置的元素 int temp = nums[i]; nums[i] = 0; // 将当前位置设为0 nums[nonZero++] = temp; // 将非零元素放到前面 } } } }
我的更多题解:hnsqls/algorithm-ls: 数据结构,算法
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论

