【算法】——双指针算法合集(力扣)

news2024/11/26 11:58:35

 8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

第一题:移动零

第二题:复写零

第三题:快乐数

第四题:盛最多水的容器

第五题:有效三角形的个数

第六题:和为s的两个数

第七题:三数之和

第八题:四数之和


 

 

第一题:移动零

283. 移动零 - 力扣(LeetCode)

dc170944f8264779a0529ff8bc82ab4d.png

6dd9fe7273084b61845aacc2605c8a76.png

class Solution {
      public void moveZeroes(int[] nums) {
        int dest = -1;
        int cur = 0;
        int tem = 0;

        while(cur < nums.length){
            if(nums[cur] != 0){
                dest++;
                tem = nums[dest] ;
                nums[dest] = nums[cur];
                nums[cur] = tem;
            }
                cur++;
        }

    }
}

第二题:复写零

1089. 复写零 - 力扣(LeetCode)

249c2e799cd2473388d21fce909a5f8e.png

913e5ee615a444928523b49d78e47471.png

class Solution {
    public void duplicateZeros(int[] arr) {
        int cur = 0 , dest = -1 , n = arr.length;
        while(cur <= n){//dest位置不确定所以不能用作判断循环的条件
           if(arr[cur] != 0){
            dest++;
           }else{
            dest += 2;
           }
           if(dest >= n-1){
            break;
           }
           cur++;
        }
        if(dest == n){
            arr[n-1] = 0;
            dest -= 2;
            cur--;
        }

        //开始从后往前复写
        while(cur >= 0 ){
            if(arr[cur] != 0){
                arr[dest] = arr[cur];
                cur--;
                dest--;
            }else{
                arr[dest] = arr[cur];
                dest--;
                arr[dest] = arr[cur];
                cur--;
                dest--;
            }
        }
    }
}

第三题:快乐数

202. 快乐数 - 力扣(LeetCode)

aeba3d1463834acd9af530221afb1078.png

02762e2f156742f98611d3fce4b8a0a9.png

a33cb7dbe06b482b9a087cdc6a3893d7.png

class Solution {
    public static int sumResult(int n){
        int sum = 0;
        while(n != 0){
            //int tem = n % 10;
            //sum += tem * tem;
            sum += Math.pow(n%10,2);
            n = n/10;
        }
        return sum;
    } 
    public boolean isHappy(int n) {
        int slow = n ,fast = sumResult(n);
        while(slow != fast){
            slow = sumResult(slow);
            fast = sumResult(sumResult(fast));
        }
        return slow == 1;
    }
}

第四题:盛最多水的容器

11. 盛最多水的容器 - 力扣(LeetCode)

6d0ea7a48fca4af88a38d01616b17e6c.png

1d94eea0dbd84c8aba1245d6d3282a4b.png

class Solution {
    public int maxArea(int[] height) {
        int left = 0 ,right = height.length -1 , ret = 0;
        while(left < right){
            int v = Math.min(height[left],height[right]) * (right - left);
            ret = Math.max(ret,v);
            if(height[left] < height[right]){
                left++;
            }else{
                right--;
            }
        }
        return ret;

    }
}

第五题:有效三角形的个数

611. 有效三角形的个数 - 力扣(LeetCode)

228e26d7d962483b83c553ba1b02f2e7.png

c7ed088cd3f64b4d8ac1e859ae1bceec.png

class Solution {
    public int triangleNumber(int[] nums) {
        int end = nums.length-1;
        Arrays.sort(nums);
        int count = 0;
        for( ; end >= 2 ; end--){
            int right = end-1;
            int left = 0;
            while(left < right){
            int tem = nums[left] + nums[right];
                if(tem > nums[end]){
                    count += right - left;
                    right--;
                }else{
                    left++;
                }
            }            
        } 
        return count;
    }
}

 

第六题:和为s的两个数

LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode)

bd601b781b184576803517b67f06883e.png

 

8303f5bdfba743fba3a88d5111e094f9.png

class Solution6 {
    public int[] twoSum(int[] price, int target) {
        int n = price.length;
        int left = 0 , right = n-1;
        int[] car = {-1,-1};
        while(left < right){
            int result = sum(price[left],price[right]);
            if(result < target){
                left++;
            }else if(result > target){
                right--;
            }else{
                car[0] = price[left];
                car[1] = price[right];
                return car;
            }
        }
        return car;

    }
    public int sum(int a , int b){
        int sum = a + b;
        return sum;
    }
}

第七题:三数之和

15. 三数之和 - 力扣(LeetCode)

7c4131c6891446459ae1280f0c087b7c.png1a956207fbf34b489499ac5952970b4f.png

c93304014deb493689333cc6fadef7be.png

07a52397256e46a196d045444ee3c985.png

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length;
        List<List<Integer>> ret = new ArrayList<>();
        for(int i = 0 ; i < n ;){
            if(nums[i] > 0){
                break;
            }
            int left = i+1 , right = n-1 ,target = -nums[i];
            while(left < right){
                int sum = sum(nums[left] , nums[right]);
                if(sum > target){
                    right--;
                }else if(sum < target){
                    left++;    
                }else{
                    ret.add(Arrays.asList(nums[left] , nums[right] , nums[i]));
                    left++;
                    right--;
                    while(left < right && nums[left] == nums[left - 1]){
                        left++;
                    }
                    while(left < right && nums[right] == nums[right + 1]){
                        right--;
                    }
                }
            }
            i++;
            while(i < n && nums[i] == nums[i-1]){
                i++;
            }

        }
        return ret;

    }
    public int sum(int a , int b){
        return a+b;
    }
}

第八题:四数之和

18. 四数之和 - 力扣(LeetCode)

强烈建议先把三数之和看完

86885d57ac144a26a092fc447bb4cedb.pngb5f2282a187f4384afe316c9c019953a.png

5e777747202b437ab2625950f1d58a2c.png

 

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> list = new ArrayList();
        Arrays.sort(nums);
        int n = nums.length;
        for(int i = 0 ; i < n ; ){
            //第一层循环遍历固定a遍历数组
            int a = nums[i];
            for(int j = i+1 ; j < n ; ){
                int b = nums[j] , left = j+1 ,right = n-1;
                long tem = (long)target - a - b;
                while(left < right){
                    long sum = sum(nums[left],nums[right]);
                    if(sum > tem){
                        right--;
                    }else if(sum < tem){
                        left++;
                    }else{
                        list.add(Arrays.asList(a,b,nums[left],nums[right]));
                        left++;
                        right--;
                        while(left < right && nums[left] == nums[left-1]){
                            left++;
                        }
                        while(right > left && nums[right] == nums[right+1]){
                            right--;
                        }
                    }
                }
                j++;
                while(j < n-2 && nums[j] == nums[j-1]){
                    j++;
                }
            }
            i++;
            while(i < n-1 && nums[i] == nums[i-1]){
                i++;
            }

        }
        return list;


    }
    public int sum(int a , int b){
        return a+b;

    }
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2204922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙学习笔记--搭建开发环境及Hello World

文章目录 一、概述二、开发工具下载安装2.1 下载开发工具DevEco Studio NEXT2.2 安装DevEco Studio 三、启动软件四、第一个应用Hello World4.1 创建应用4.2 创建模拟器4.3 开启Hyper-v功能4.4 启动虚拟机 剑子仙迹 诗号&#xff1a;何须剑道争锋&#xff1f;千人指&#xff0c…

免费又好用的保护网站WAF,基于语义引擎的waf雷池社区版推荐

为什么传统规则防护失效了&#xff1f;&#x1f914; 目前&#xff0c;大多数 Web 应用防火墙&#xff08;WAF&#xff09;依赖规则匹配来识别和阻断攻击流量。然而&#xff0c;随着 Web 攻击的低成本、复杂多样的手段和频繁爆发的高危漏洞&#xff0c;管理人员不得不频繁调整防…

B树(Balance-tree,多路平衡查找树)

目录 1.来由 2.定义 2.1内部结点 2.2外部结点&#xff08;失败结点&#xff09; 2.3阶 3.性质 3.1平衡 3.2有序 3.3多路 4.查找 4.1成功 4.2失败 5.插入 4.1不用调整 4.2需要调整 4.3多次调整 4.4根节点溢出 6.构建 7.删除 7.1不用调整 7.2出现下溢出 7.…

数据结构之二叉搜索树(key模型与key_value模型)

二叉搜索树&#xff08;key模型与key_value模型&#xff09; 1. ⼆叉搜索树的概念2. ⼆叉搜索树的性能分析3. ⼆叉搜索树的插⼊4. ⼆叉搜索树的查找5. ⼆叉搜索树的删除6. ⼆叉搜索树的实现代码7. ⼆叉搜索树key和key/value使⽤场景7.1 key搜索场景&#xff1a;7.2 key/value搜…

Vue入门-指令修饰符-v-model修饰符

v-model.trim ->去除首尾空格 demo&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

C语言刷题 LeetCode 30天挑战 (十)Stack 栈 (MinStack)

这个题目要求你设计一个特殊的栈&#xff08;MinStack&#xff09;&#xff0c;不仅要具备普通栈的基本功能&#xff08;push、pop 和 top&#xff09;&#xff0c;还要能够在常数时间内&#xff08;O(1) 时间复杂度&#xff09;获取栈中的最小元素&#xff08;getMin&#xff…

C#的JSON序列化与反序列化

前言 记录使用C#进行json序列化和反序列化方法 一、序列化 序列化&#xff0c;即将数据组织成某种形式&#xff0c;存储在变量或文件中&#xff0c;是保存数据的一种方式。 下面以数据的形式存放数据&#xff0c;以字典的形式组织数据&#xff0c;将组织好的数据存放在json文…

计算机网络:物理层 —— 数据的传输方式

文章目录 传输方式串行传输串行传输方式特点应用 并行传输特点应用 网卡的串/并转换同步传输同步时钟频率的误差问题特点应用 异步传输特点应用 单向通信特点应用 双向交替通信特点应用 双向同时通信特点应用 传输方式 串行传输 串行传输是一种数据传输方式&#xff0c;指的是…

熵权法计算评价指标权重——使用Excel VBA实现

[ 熵权法 ] 信息是系统有序程度的一个度量&#xff0c;熵是系统无序程度的一个度量&#xff1b;根据信息熵的定义&#xff0c;对于某项指标&#xff0c;可以用熵值来判断某个指标的离散程度&#xff0c;其信息熵值越小&#xff0c;指标的离散程度越大&#xff0c; 该指标对综合…

大模型与生成式AI结合:HelpLook引领零售增长新篇章

近年来&#xff0c;零售行业在数字化、技术革新、经济波动及消费者需求多变的挑战下&#xff0c;展现出强大的适应性和创新力。AI技术的深度融合&#xff0c;正引领零售、电商、教育等领域&#xff0c;尤其是零售业步入一个生产力飞跃、客户至上的全新时代。企业亟需挖掘客户与…

Caffeine+Redis两级缓存架构

CaffeineRedis两级缓存架构 在高性能的服务项目中&#xff0c;我们一般会将一些热点数据存储到 Redis这类缓存中间件中&#xff0c;只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时&#xff0c;也能降低数据库的压力。 但是在一些场景下单纯使用 Redis 的分布…

24最新秋叶V4.9整合包发布!什么是Stable Diffusion?如何安装Stable Diffusion?

前言 Stable Diffusion秋叶整合包&#xff0c;一键安装Stable Diffusion&#xff0c;门槛极低&#xff0c;完全免费&#xff0c;支持Nvidia全系列显卡。 所有的AI设计工具&#xff0c;安装包、模型和插件&#xff0c;都已经整理好了&#xff0c;&#x1f447;获取~ Stable Di…

二叉树系列 10/11

一、二叉树中的伪回文路径 给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中&#xff0c;存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数…

K8s中pod的管理和优化

一、k8s中的资源 1.1 资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象 资源&#xff0c;用户需要通过操作资源来管理kubernetes。kubernetes的本质上就是一个集群系统&#xff0c;用户可以在集群中部署各种服务所谓的部署服务&#xff0c;其实就是在kubernetes集群中…

MySQL中text类型对查询效率的影响

背景 任何设计都需要结合实际的需求或者说系统来做&#xff0c;我们现在服务端的整体设计趋向于领域驱动模型&#xff08;DDD&#xff09;。将业务抽象划分成各个独立领域对象&#xff0c;各个领域各尽其职&#xff0c;只负责自己领域的工作。回到MySQL设计&#xff0c;在我们将…

springboot查询全部部门流程

前端发送请求后&#xff0c;会请求DeptController的方法list()。 package com.intelligent_learning_aid_system.controller;import com.intelligent_learning_aid_system.pojo.Dept; import com.intelligent_learning_aid_system.pojo.Result; import com.intelligent_learni…

python安装插件

报错 E:\pythonProject\pythonProject_JD\Scripts\python.exe E:\浏览器下载\pythoncode\pythonProject_JD\car.py Traceback (most recent call last): File "E:\浏览器下载\pythoncode\pythonProject_JD\car.py", line 5, in <module> from selenium…

jdk 相关网址

官方资源&#xff1a; OpenJDK: https://openjdk.org/ OpenJDK 官方网站 (https://openjdk.org/) 是 Java 开发者的重要资源。以下是该网站的主要内容和功能&#xff1a; 项目概览 OpenJDK 的介绍和目标最新版本信息 下载 源代码下载预构建二进制文件链接 文档 开发者指南AP…

视频监控汇聚平台Liveweb安防监控平台实现接入监控视频集中管理方案

随着各行业数字化转型的不断推进&#xff0c;视频监控技术在行业内的安防应用及管理支撑日益增多。然而&#xff0c;由于前期规划不清晰、管理不到位等问题&#xff0c;视频监管系统普遍存在以下问题&#xff1a; 1. 各部门单位在视频平台建设中以所属领域为单位&#xff0c;导…

java多态-cnblog

java多态 细分的重载会增加代码量&#xff0c;降低易用程度 定义一个类&#xff0c;继承所有类的对象&#xff0c;根据向上转型可以让每个类的对象都调用初始类的方法&#xff0c;在方法中设置判断&#xff0c;不同的对象导致方法做不同的事&#xff0c;这就是多态 写一个灯…