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一满足条件就会被换到右边去,依次往复就可以完成题目要求了;

相关推荐
l1t12 分钟前
DeepSeek总结的OpenZL压缩变换器
c++·算法
想吃火锅100513 分钟前
【leetcode】238.除了自身以外数组的乘积js
javascript·算法·leetcode
坤坤子吖35 分钟前
算法学习——高精度加减乘除
c++·笔记·学习·算法
CQU_JIAKE42 分钟前
10.1[A]2267,磐久UMX【上下文128K,KVCache部分]
算法
朝朝辞暮i1 小时前
C++ 第 14 课:引用 &
开发语言·c++·算法
Joe_Wang51 小时前
【从0到1学习JVM · 21】既不浪费空间又没有碎片,标记整理算法到底慢在哪
jvm·学习·算法·垃圾回收·标记整理算法
让学习成为一种生活方式1 小时前
PlantCellChat--单细胞与空间转录组数据预测植物细胞间通讯的R包--The Plant Journal
算法
C++ 老炮儿的技术栈1 小时前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
梦帮科技2 小时前
多任务权重流形融合:SLERP 球形线性插值、DARE 稀疏剪枝与多专家模型融合落地
人工智能·深度学习·算法·机器学习·tensorflow·聚类·剪枝
Tisfy2 小时前
LeetCode 0020.有效的括号:栈匹配
算法·leetcode·字符串·题解·括号匹配