LeetCode例题讲解:移动044

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

首先想到的应该是当两个连续的数,前面为零,后面不为零时,则两者互换位置

void moveZeroes(int* nums, int numsSize) {
    for(int i = 0;i+1 < numsSize ;i++)
    {
        if(nums[i] == 0 && nums[i+1] != 0)
        {
            int r    = nums[i+1];
            nums[i+1] = 0;
            nums[i]   = r;
        }

    }
    
}

但会遇到一个问题,如果循环一次,当两个零连续时,则无法继续,默认为成功

因此需要不断必须循环判断,当全部成立时方可停止循环判断。

void moveZeroes(int* nums, int numsSize) {
    while(true)
    {
    int count =0;
        for(int i = 0;i+1 < numsSize ;i++)
        {
            if(nums[i] == 0 && nums[i+1] != 0)
            {
                int r    = nums[i+1];
                nums[i+1] = 0;
                nums[i]   = r;
                count++;
                break;
            }

        }
        if(count == 0)
        {
            break;
        }
    }
    
}

但该循环时间复杂度过大,需加以改进

若去除for中的break,则可以一个循环找出多个错误,加快一些时间

void moveZeroes(int* nums, int numsSize) {
    while(true)
    {
    int count =0;
        bool isOK = true;
        for(int i = 0;i+1 < numsSize ;i++)
        {
            if(nums[i] == 0 && nums[i+1] != 0)
            {
                nums[i]   = nums[i+1];
                nums[i+1] = 0;
                isOK = false;
                count++;
            }

        }
        if(isOK)
        {
            break;
        }
    }
    
}
void moveZeroes(int* nums, int numsSize) {
    int j = 0;
    for(int i = 0;i < numsSize ; i++)
    {
        if(nums[i] != 0)
        {
            nums[j] = nums[i];
            j++;
        }
    }
        while(j < numsSize)
        {
            nums[j] = 0;
            j++;

        }

    
}

相关推荐

  1. LeetCode例题讲解:45.跳跃游戏Ⅱ

    2024-05-10 18:08:04       30 阅读
  2. LeetCode例题讲解:最大子数组和

    2024-05-10 18:08:04       36 阅读
  3. LeetCode例题讲解:781.森林中的兔子

    2024-05-10 18:08:04       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 18:08:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 18:08:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 18:08:04       82 阅读
  4. Python语言-面向对象

    2024-05-10 18:08:04       91 阅读

热门阅读

  1. 光伏发电消纳是什么意思?如何消纳?

    2024-05-10 18:08:04       30 阅读
  2. export QT_DEBUG_PLUGINS=1

    2024-05-10 18:08:04       28 阅读
  3. Chrome命令大全

    2024-05-10 18:08:04       27 阅读
  4. ANSYS许可管理工具

    2024-05-10 18:08:04       31 阅读