LeetCode刷题日记之链表II

news2024/11/23 12:08:07

1.四数相加II

题目描述

在这里插入图片描述

解题思路

1.定义一个哈希Map,其中key存放两数之和,value存放两数和出现的次数。
2.遍历统计出nums1和nums元数相加和出现的次数(a+b)。
3.遍历nums3和nums4,并求和(c+d),统计出(0-(c+d))在Map中出现的次数。
4.返回(0-(c+d))出现次数的累加和。

var fourSumCount = function(nums1, nums2, nums3, nums4) {
   let map = new Map()
   let result = 0;
   for(let i = 0;i<nums1.length;i++) {
       for(let j = 0;j<nums2.length;j++) { // 统计前两个数组元素之和
           let tmp = nums1[i] + nums2[j]
           if(map.has(tmp)){
               map.set(tmp,map.get(tmp) + 1)
           } else {
               map.set(tmp,1)
           }
       }
   }

   for(let i=0;i<nums3.length;i++) {
       for(let j = 0;j<nums4.length;j++) {
           let tmp = nums3[i] + nums4[j]
           if(map.has(0-tmp)){ // 如果map中存在 说明四数相加等于0
               result += map.get(0-tmp)
           }
       }
   }

   return result
};

2.赎金信

题目描述

在这里插入图片描述

解题思路

1.定义一个哈希Map,其中key存放ransomNote中的每个字母,value表示每个字母出现的次数。
2.遍历ransomNote字符串,统计每个字母出现的次数。
3.遍历magazine字符串,Map中的每个字母减去对应的次数。
4.遍历map,判断是否有字母出现次数大于0,有则返回false,否则返回true.

var canConstruct = function(ransomNote, magazine) {
    let map = new Map();
    for(let i = 0;i<ransomNote.length;i++) {
         map.set(ransomNote[i],(map.get(ransomNote[i])|| 0)+1)
    }

    for(let i = 0;i<magazine.length;i++) {
        if(map.has(magazine[i])) {
            map.set(magazine[i],map.get(magazine[i]) - 1)
        }
    }

    for(let [k,v] of map) {
        if(v > 0) {
            return false
        }
    }
    return true
};

3.三数之和

题目描述

在这里插入图片描述

解题思路

1.将数组按照从小到大的顺序排序。
2.遍历数组,在循环中使用双指针,其中左指针表示循环索引+1,右指针为数组末位索引。
3.判断nums[i]+nums[left]+nums[right]=sum和与0的大小。
4.如果sum>0,则右指针左移,如果sum<0,左指针右移,如果sum==0,将对应数据添加入结果中。
5.下次循环继续如此操作,循环中注意去重剪枝。

var threeSum = function(nums) {
   let result = [];
   nums = nums.sort((a,b) => a-b)
   for(let i = 0;i<nums.length;i++) {
    if(nums[i] > 0) {
        return result
    }
    if(i>0&&nums[i] == nums[i-1]) {
        continue
    }
    let left = i + 1;
    let right = nums.length -1
    while(left<right) { // i j k 不相等 所以这儿不能又等于
       let tmp = nums[i] + nums[left] + nums[right]
       if(tmp > 0) {
           right --
       } else if(tmp<0) {
           left ++
       } else {
           result.push([nums[i],nums[left],nums[right]])

           while(left<right && nums[right] == nums[right - 1]) right--
           while(left<right && nums[left] == nums[left+1]) left++ // 去重


           left ++
           right -- // 区间缩小
       }
    }
   }

   return result
};

4.四数之和

题目描述

在这里插入图片描述

解题思路

本题解题思路和三数之和相同,只需将外部循环改为双重循环即可。

var fourSum = function(nums, target) {
     nums = nums.sort((a,b) => a- b);
    const result = [];
    for(let i = 0;i<nums.length;i++) {
        if(nums[i]>target&&target>0){
            break; // 剪枝
        }
        if(i>0&&nums[i] === nums[i-1]){
            continue; // 去重
        }
        for(let j = i+1;j<nums.length-1;j++){
            if(nums[i] + nums[j] > target&&target>0){
                break; // 剪枝
            }
            if(j>i+1&&nums[j] == nums[j-1]){
                continue // 去重
            }
            const twoSum = nums[i] + nums[j]
            let left = j+1;
            let right = nums.length-1
            while(left<right){
                if(twoSum + nums[left]+nums[right] === target) {
                    result.push([nums[i],nums[j],nums[left],nums[right]])
                    while(right>left&&nums[right] == nums[right-1]) {
                        right--
                    }
                    while(right>left&&nums[left] == nums[left+1]){
                        left++
                    }
                    left++
                    right--;
                } else if(twoSum + nums[left] + nums[right] > target) {
                   right --
                  
                } else  {
                    left++;
                }
            } 
        }
    }

    return result
};

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

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

相关文章

央企招聘:中国人民银行2023年度招聘启事

2023年中国外汇交易中心 博士后科研工作站招聘公告 中国外汇交易中心暨全国银行间同业拆借中心&#xff08;以下简称“交易中心”&#xff09;于1994年成立&#xff0c;是中国人民银行直属事业单位&#xff0c;为银行间外汇、货币、债券及其衍生产品提供交易、发行、基准及一线…

如何通过.exe文件控制一台电脑

CVE-2022-21999漏洞 如何实现发送一个.exe文件偷偷控制他人的电脑&#xff1f;这个想法很刑的&#xff0c;所以我只是说明我的实现方式&#xff0c;具体操作建议仅用于hvv等专业领域&#xff0c;请勿以身试法。 首先我们分析一下.exe文件的实际应用场景---windows系统的电脑&am…

11、setoolkit工具 构造钓鱼网站、powershell注入

靶机&#xff1a;192.168.11.105攻击机kail&#xff1a;192.168.11.1061.在kali中启动setoolkitsetoolkit2.利用SET构建钓鱼网站1&#xff09;选择1 Social-Engineering Attacks &#xff08;社会工程学攻击&#xff09;2&#xff09;选择2 Website Attack Vectors &#xff…

Spring Boot 概念、创建和运行 · Spring Boot 的优点 · 启动第一个 Spring Boot · Spring Boot 的注意事项

一、什么是 Spring Boot二、Spring Boot 优点三、Spring Boot 项目创建四、项目目录介绍和运行4.1 运行项目4.2 输出 Hello World五、注意事项5.1 包路径错误5.2 小结&#xff1a;约定大于配置六、总结一、什么是 Spring Boot Spring 的诞生是为了简化 Java 程序的开发的&…

GAMES101-现代计算机图形学入门-闫令琪 课程笔记 - 汇总(上)

一些前言与感慨&#xff1a; 学了再多的AI&#xff0c;终究还是没有办法拒绝计算机图形学的魅力。当初就不该一招不慎&#xff0c;踏入AI的坑。 可惜当年在学校里学计算机图形学的时候&#xff0c;还没有闫令琪这么好的课程&#xff0c;当时学得一知半解&#xff0c;云里雾里…

极市直播回放第106期丨阿里达摩院:兼顾速度与精度的高效目标检测框架DAMO-YOLO

阿里巴巴达摩院智能计算实验室团队设计并开源了一款兼顾速度与精度的目标检测框架DAMO-YOLO&#xff0c;其性能超越了目前的一众YOLO系列方法&#xff0c;在实现精度SOTA的同时&#xff0c;保持了很高的推理速度。DAMO-YOLO是在YOLO框架基础上引入了MAE-NAS、efficient-RepGFPN…

cas:1628790-40-8|脂溶性Cyanine7-COOH|CY7-Carboxylic Acid

cas:1628790-40-8|脂溶性Cyanine7-COOH|CY7-Carboxylic Acid 名称&#xff1a;脂溶性Cyanine7-COOH|CY7-Carboxylic Acid cas:1628790-40-8 英文同义词: Cy7;Colpro;Prothil;R-13615;Cy7-COOH;CY7ACID;Cy7NHS;AY-62022;Cy7,>97%;Sulfo-Cyanine7 中文名称:磺基-CY7羧酸 …

【小甲鱼C语言】课后笔记第一章第四节——数据类型

目录 1、数据类型 2、short 和 long 3. sizeof 运算符 4. signed 和 unsigned 5、课后习题&#xff08;编程题&#xff09; 1、数据类型 在 C 语言里&#xff0c;所谓的数据类型就是坑的大小。我们说变量就是在内存里边挖一个坑&#xff0c;然后给这个坑命名。那么数据类型…

U盘格式化后能恢复数据吗?U盘删除的数据还能恢复吗

U盘格式化后能恢复数据吗&#xff1f;通常情况下&#xff0c;我们U盘里的数据丢失后&#xff0c;它们并没有立即消失&#xff0c;它们只是被系统做了一个标记&#xff0c;将数据存储的位置标记成可写入的状态&#xff0c;只有当新数据写入的时候&#xff0c;这个存储位置才会被…

USB转UART的桥接控制器 国产DPU02能不能软硬件兼容替换CP2102?

DPU02是一个高度集成的USB转UART的桥接控制器&#xff0c;可将RS-232设计更新为USB设计&#xff0c;并简化PCB组件空间。 该DPU02包括了一个USB 2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整调制解调控制信号的异步串行数据总线&#xff08;UART&#xff09;控制器…

自动驾驶车辆安全保证机制-Mobileye的RSS模型

自动驾驶汽车(AV)将如何与人类司机安全地共享道路? 成功实现自动驾驶未来的最大威胁之一是对自动驾驶汽车安全驾驶的含义缺乏共识。只有当行业、政府和公众有一个共同的方式来理解和评估自动驾驶汽车(AV)的驾驶技能和安全,他们才会被信任,可以安全地与人类驾驶的车辆一起…

Go1.19.3 数组与切片原理简析

数组 Go语言数组&#xff0c;声明有如下几种方式&#xff1a; var arr1 [10]intarr1[0] 10000var arr2 [10]int{0:0,2:2}var arr3 [...]int{1,2,3}其中arr1只是进行声明&#xff0c;数组在声明时&#xff0c;内存空间已经被开辟过&#xff0c;所以可以赋值。arr2是声明的同…

javafx 编写管理页面 增删改查

注册界面&#xff1a;用户通过输入页面信息&#xff0c;点击注册&#xff0c;将数据存入数据库中。 <Tab text"用户注册"> <content> <AnchorPane minHeight"0.0" minWidth"0.0" prefHeight"761.0" prefWidth"819…

Vue的四个常用选项

文章目录前言一、四大选项简介二、filters&#xff08;过滤器&#xff09;三、computed&#xff08;计算属性&#xff09;四、methods&#xff08;方法&#xff09;五、watch&#xff08;观察&#xff09;总结:前言 本文讲解了vue.js中的四个常用选项&#xff0c;4个参数选项&…

数据结构——归并排序

坚持看完&#xff0c;结尾有思维导图总结 这里写目录标题归并排序的思路归并算法的图解具体程序对性质的分析归并排序的非递归版本总结归并排序的思路 首先第一个问题是&#xff0c;什么是归并排序&#xff1f; 官方的说法: 归并排序&#xff08;MERGE-SORT&#xff09;是建立…

pikachu靶场-7 不安全的文件下载和上传

不安全的文件下载和上传 不安全的文件下载 文件下载&#xff08;unsafedownload&#xff09;漏洞概述 很多网站都会提供文件下载功能&#xff0c;即用户可以通过点击下载链接&#xff0c;下载到链接所对应的文件。 但是&#xff0c;如果文件下载功能设计不当&#xff0c;则…

基于51单片机的数字频率计设计

仿真原理图&#xff1a; 程序运行图&#xff1a; 部分程序&#xff1a; #define LED_GLOBAL 1 #include "led.h" /******************************************************************************************* *函数名称&#xff1a;delay_us(uint us) *函数…

15.JavaScript 02

文章目录一、DOM简单学习&#xff1a;为了满足案例要求1、DOM知识点简单学习2、事件简单学习3、案例1&#xff1a;电灯开关二、BOM1、概念2、组成3、Window&#xff1a;窗口对象1. Window窗口对象知识点2. 案例2&#xff1a;轮播图4、Location&#xff1a;地址栏对象1. Locatio…

手写Spring5(资源加载Spring.xml解析和注册Bean对象)

文章目录目标设计思路项目结构一、实现1、资源加载接口定义和实现获取ClassPath下的文件信息获取指定文件路径的方式读取文件信息获取HTTP的方式读取云服务的文件2、包装资源加载器定义和实现-策略模式的体现包装资源加载器实现3、Bean定义读取接口4、Bean定义抽象类实现5、解析…

[激光原理与应用-53]:《激光焊接质量实时监测系统研究》-4-激光焊接系统软件设计

目录 前言&#xff1a; 4.1 操作系统和开发平台 4.1.1 Windows2000 操作系统概述 4.1.2 虚拟仪器开发平台软件 LabWindows/CVI 4.2 总体软件设计 4.2.1 数据采集程序 4.2.2 软件实现的功能 4.2.2.1 主机软件的数据采集 4.2.2.2 主机软件的数据分析&#xff08;核心&am…