题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作
,不能拷贝额外的数组。
尽量减少操作次数。
分析及反思
思考了半天 先想到的是
暴力
,从最后面开始扫加粗文字
扫到零 就把0和之后的数字全部swap一遍 然后缩小边界 继续找下一个0
14:23 info
解答成功:
执行耗时:11 ms,击败了5.02% 的Java用户
内存消耗:40.3 MB,击败了5.62% 的Java用户
然后看了一下评论区大佬的双指针解法。
真的是妙脆角到家,妙脆角他妈给妙脆角开门,妙到家了
!!
填充法吧,把所有的数字除0外依次从i=0放入:遇到0跳过放入下一个数组
最后把空位不0即可!
代码
妙解
void moveZeroes(int* nums, int numsSize) {
int i = 0,j = 0;
for(i = 0 ; i < numsSize; i++)
{
if(nums[i] != 0)
{
nums[j++] = nums[i];
}
}
while(j < numsSize)
{
nums[j++] = 0;
}
}
暴力
class Solution {
public void moveZeroes(int[] nums) {
int k = 0;
for (int i = nums.length - 1; i >= 0; i--) {
if (nums[i] == 0) {
for (int j = i; j < nums.length - k - 1; j++) {
swap(nums, j, j + 1);
}
k++;//0个数 边界缩小
}
}
}
public void swap(int[] nums, int i, int j) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
}
本文作者:Author: 寒光博客
文章标题:[LeetCode]283.移动零
本文地址:https://www.dxoca.cn/Algorithm/373.html 百度已收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。
本文地址:https://www.dxoca.cn/Algorithm/373.html 百度已收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。