LeetCodeHot100——283.移动零

题目链接放在这里了:

39. 组合总和 - 力扣(LeetCode)

这道题是典型的双指针滑动窗口,并且窗口大小是可变的,我们直接上两个指针,注意在处理这类题目的时候一定要想好了左指针和右指针都指向谁,什么时候移动左指针,什么时候移动右指针;

这道题的具体代码和思路如下:

java 复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        if(nums == null||nums.length==0){
            return;
        }
        //左指针
        int j = 0;
        //右指针作为主遍历
        for(int i = 0;i<nums.length;i++){
            if(nums[i] != 0){
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j++] = tmp;
            }
        }
    }
}

这题的目的是处理一个数组,使其内部的非0元素顺序不变的同时,0元素都移到数组的后面。这道题我在做的时候想比较简单,就是遍历这个数组的同时如果遇到了0元素就进行一个自循环,查找它后面的首个非0元素并交换位置,依次往复,如果已经处理完就像1,3,2,0,0,0这种的时候,会判断后面还有没有非0元素,如果没有就跳出循环,返回数组,但实际上我的这种做法效率比较低,毕竟嵌套了自循环;

推荐的做法是双指针,我们首先定义一下左右指针,左指针也就是慢指针,我让左指针指向最左边的0,让右指针指向非0数字,然后一满足这个条件我就交换值,把第一个0换到后面去,然后移动左指针让他再次指向最左边的0,这个逻辑走下去,最左边的0一满足条件就会被换到右边去,依次往复就可以完成题目要求了;

相关推荐
Jerry14 分钟前
LeetCode 1002. 查找共用字符
算法
无限的鲜花31 分钟前
协程本质是函数加状态机——零基础深入浅出 C++20 协程
c++·算法·c++20
旖-旎1 小时前
《LeetCode 64 最小路径和 || LeetCode 174 地下城游戏》
c++·算法·leetcode·动态规划
森林古猿11 小时前
再论斜率优化
c++·学习·算法
万法若空1 小时前
【数学-简单数论】同余中的逆
线性代数·算法
凯瑟琳.奥古斯特2 小时前
力扣1009补码解法C++实现
开发语言·c++·算法·leetcode·职场和发展
KaMeidebaby2 小时前
卡梅德生物技术快报|蛋白的叠氮基修饰:实操解析:核酸模板耦合蛋白的叠氮基修饰实现靶蛋白定点共价标记
前端·人工智能·物联网·算法·百度
通信仿真爱好者3 小时前
第【60期】--大规模MIMO系统信号检测算法误码率比较 --matlab完整代码+参考文章
算法·matlab·mimo·信号检测
AI科技星4 小时前
全域谱分析:无穷维超复数信息场分形统一场论——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·python·算法·金融·乖乖数学·全域数学
先吃饱再说5 小时前
为什么堆能 O(log n) 插入?拆解完全二叉树的数组魔法
算法·排序算法