当前位置: 首页 > article >正文

Leecode热题100-283.移动零

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

进阶:你能尽量减少完成的操作次数吗?

题目比较简单,直接上代码了,思路都在代码注释里,不懂的话私信或者留言,看到第一时间解答

class Solution {
    /**本题思路是先把非零最右侧的指针(nonZeroRightBound)设置为-1,然后从零开始遍历元素,如果发现了就把它和nonZeroRightBound下一个元素交换,同时nonZeroRightBound++*/
    public void moveZeroes(int[] nums) {
        if(nums.length == 1) {
            return;
        }
        /**非零元素的右边界,目前还没有*/
        int nonZeroRightBound = -1;
        /**cur是我们目前遍历的指针 */
        int cur = 0;
        while(cur < nums.length) {
            /**如果遇到非0,就把它和非零右边界交换*/
            if(nums[cur] != 0) {
                swap(nums, cur, ++nonZeroRightBound);
            }
            /**不管右没有交换,都要移动到下一个,即使是存在交换,也是和前面的进行交换,因为nonZeroRightBound是我们确定的非0区域右边界
            我们肯定看过这个位置才确定它是非0的 */
            cur ++;
        }
    }
    /**最普通的交换位置的方法 */
    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

打败这么点人也是没想到,不过这已经最后时间复杂度了,常数时间,这么小的题不想改了,大家自己改把


http://www.kler.cn/news/330132.html

相关文章:

  • AI学习指南深度学习篇-权重正则化的实现机制
  • 技术成神之路:设计模式(十八)适配器模式
  • 深度学习中的优化方法(Momentum,AdaGrad,RMSProp,Adam)详解及调用
  • 后台管理系统脚手架
  • ICM20948 DMP代码详解(58)
  • 深入探索 Pygwalker:Python 数据可视化的强大工具
  • STM32-MPU6050+DAM库源码(江协笔记)
  • Ps:打开与置入
  • C++——函数功能是:将两个两位数的正整数a、b合并成一个整数c,合并规则是将a的十位和个位分别放在c的千位和个位,将b的十位和个位分别放在c的十位和百位。
  • 小论树形dp
  • 游戏如何对抗改包
  • 【JavaScript】JIT
  • 【gradio】gradio构建webui demo时只支持一个访问?
  • [BCSP-X2024.小高3] 学习计划
  • 网络编程套接字TCP
  • DNS与ICMP
  • 毕业设计选题:基于ssm+vue+uniapp的校园水电费管理小程序
  • 查找与排序-归并排序
  • rabbitMq-----broker服务器
  • 解决nginx+tomcat宕机完美解决方案