力扣爆刷第138天之哈希表五连刷(二三四数之和)

力扣爆刷第138天之哈希表五连刷(二三四数之和)

文章目录

      • 力扣爆刷第138天之哈希表五连刷(二三四数之和)
      • 一、1. 两数之和
      • 二、454. 四数相加 II
      • 三、383. 赎金信
      • 四、15. 三数之和
      • 五、18. 四数之和

一、1. 两数之和

题目链接:https://leetcode.cn/problems/two-sum/description/
思路:求两数之和,只需要借用哈希表存放结果与当前值的差值。如果发现当前元素已经存在哈希表中,说明另一个数已经存在了。

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for(int i = 0; i < nums.length; i++) {if(map.containsKey(nums[i])) return new int[] {map.get(nums[i]), i};map.put(target - nums[i], i);}return new int[] {-1, -1};}
}

二、454. 四数相加 II

题目链接:https://leetcode.cn/problems/4sum-ii/description/
思路:四数之和可以转化为两数之和,然后按照两数之和的做法来做。先把两个数组的值的匹配和出现的次数统计到map中,然后再利用0 - (c + d),去map中寻找,找到即累加。

class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int count = 0;Map<Integer, Integer> map = new HashMap<>();for(int i = 0; i < nums1.length; i++) {for(int j = 0; j < nums2.length; j++) {int t = nums1[i] + nums2[j];map.put(t, map.getOrDefault(t, 0) + 1);}}for(int i = 0; i < nums3.length; i++) {for(int j = 0; j < nums4.length; j++) {count += map.getOrDefault(- nums3[i] - nums4[j], 0);}}return count;}
}

三、383. 赎金信

题目链接:https://leetcode.cn/problems/ransom-note/description/
思路:题目求的是一个字符串是否可以由另一个字符串组成,只需要把第一个字符串用数组(长度26表示26个字母)收集起来,然后遍历另一个数组来判断是否可以组成。

class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] flag = new int[26];for(int i = 0; i < ransomNote.length(); i++) {int t = ransomNote.charAt(i) - 'a';flag[t]++;}for(int i = 0; i < magazine.length(); i++) {int t = magazine.charAt(i) - 'a';if(flag[t] > 0) {flag[t]--;}}for(int i : flag) {if(i > 0) return false;}return true;}
}

四、15. 三数之和

题目链接:https://leetcode.cn/problems/3sum/description/
思路:使用两次for循环,三个指针,外层控制一个指针,内存控制两个指针,每层都需要考虑如何去重。

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result = new ArrayList<>();Arrays.sort(nums);int len = nums.length;for(int i = 0; i < len-2; i++) {if(nums[i] > 0) break;if(i > 0 && nums[i] == nums[i-1]) continue;int j = i+1, k = len - 1;while(j < k) {int t = nums[i] + nums[j] + nums[k];if(t == 0) {List<Integer> list = new ArrayList<>();list.add(nums[i]);list.add(nums[j]);list.add(nums[k]);result.add(list);while(j < k && nums[j] == nums[j+1]) j++;while(j < k && nums[k] == nums[k-1]) k--;j++;k--;}else if(t < 0) {j++;}else{k--;}}}return result;}
}

五、18. 四数之和

题目链接:https://leetcode.cn/problems/4sum/description/
思路:四数之和和三数之和类似,就是多了一层for循环。

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> result = new ArrayList<>();int len = nums.length;Arrays.sort(nums);for(int i = 0; i < len - 3; i++) {if(i > 0 && nums[i] == nums[i-1]) continue;for(int j = i + 1; j < len - 2; j++) {if(nums[i] + nums[j] > target && nums[i] > 0) break;if(j > i+1 && nums[j] == nums[j-1]) continue;int k = j + 1, h = len - 1;while(k < h) {long t =(long) (nums[i] + nums[j] + nums[k] + nums[h]);if(t == target) {result.add(Arrays.asList(nums[i], nums[j], nums[k], nums[h]));while(k < h && nums[k] == nums[k+1]) k++;while(k < h && nums[h] == nums[h-1]) h--;k++;h--;}else if (t > target) {h--;}else{k++;}}}}return result;}
}

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

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

相关文章

linux安装Openresty

安装必要的依赖库 指定仓库地址 下载openresty 添加环境变量 vi /etc/profile i export NGINX_HOME/usr/local/openresty/nginx/ export PATH${NGINX_HOME}/sbin:$PATH esc :wq source /etc/profile #启动 nginx # 重启 nginx -s reload #关闭 nginx -s stop

宿舍管理系统代码详解(主页面)

本篇将对管理系统的主页面的代码进行详细的介绍。 目录 一、主页面前端代码 1.样式展示 2.代码详解 &#xff08;1&#xff09;template部分 &#xff08;2&#xff09;script部分 &#xff08;3&#xff09;路由导航守卫 &#xff08;4&#xff09;在vue中引用vue 一、主页…

运维别卷系列 - 云原生监控平台 之 01.prometheus 入门和部署

文章目录 [toc]什么是 PrometheusPrometheus 架构及其一些生态系统组件Prometheus 的工作模式Prometheus 的适用场景Prometheus 的不适用场景Prometheus 词汇表 Prometheus 启动参数Prometheus 配置文件通用占位符定义配置文件示例解释服务发现 Prometheus 部署创建 namespace创…

Unity里的Time

Time and frame rate management Time类&#xff1a; Time script reference page. 一些常见的属性有&#xff1a; Time.time 返回从游戏开始经历的时间.Time.deltaTime 返回从上帧结束到现在经历的时间&#xff0c;和帧率成反比Time.timeScale 控制时间流逝的因子Time.fixe…

嵌入式学习-通用定时器

简介 框图介绍 时钟选择 计数器部分 输入捕获和输出比较框图 嵌入式学习全文参考&#xff08;小向是个der&#xff09;做笔记&#xff1a;https://blog.csdn.net/qq_41954556/article/details/129735708

C#中json数据序列化和反序列化的最简单方法(C#对象和字符串的相互转换)

文章目录 将C#对象转换为json字符串Newtonsoft模块的安装用Newtonsoft将对象转换为json字符串 将json字符串转换为C#对象 将C#对象转换为json字符串 本介绍将基于C#中的第三方库Newtonsoft进行&#xff0c;因此将分为Newtonsoft模块的安装和使用两部分。该模块的优势在于只需要…

Python以docker形式部署,flask简易服务器。

公司大部分都是springboot 服务器&#xff0c;有时候用到python写的一些模型&#xff0c;部署在linux上进行处理 首先项目这样&#xff1a; flask就不说了&#xff0c;快捷服务器&#xff0c; # -*- coding: utf-8 -*-from flask import Flask, request# 实例化Flask对象 app…

LVM - Linux磁盘逻辑卷管理器概念讲解及实践

1、lvm概念 逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,它可以将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。LVM可以每次从卷组中划分出不同大小的逻辑卷(Logi…

c语言bug汇总中篇4

31. 错误的错误处理 在C语言编程中&#xff0c;错误处理是一个重要的环节。错误的错误处理方式可能会导致程序崩溃、数据丢失或安全问题。 为了避免这些问题&#xff0c;程序员应该&#xff1a; - 检查所有可能失败的函数调用&#xff0c;并正确处理返回值或错误代码。 - 使…

【核弹】我的第一款IDEA插件

SuperHotSwap 插件名称叫做&#xff1a;SuperHotSwap&#xff08;超级热更新&#xff09; 开发初心&#xff1a;旨在做出一款最便捷的IDEA热更新插件&#xff0c;减少用户操作步骤&#xff0c;提供零配置的可视化操作更新。 为什么要写这个插件&#xff1a; 每次改一下Mappe…

OSPF工作过程

1.OSPF的数据包 hello包——周期性的发现&#xff0c;建立以及保活邻居关系 hello时间 --- 10S 死亡时间 --- 4倍的hello时间 --- 40S RID --- 1&#xff0c;全网唯一;2&#xff0c;格式统一---- 格式要求和IP地址一样&#xff0c;由32位二进制构成&#xff0c;使用点分十进制…

[js] 递归,数组对象根据某个值进行升序或者降序

一、效果图 1.1 父级 1.2 父级与子级 二、代码 升序降序&#xff0c;只要把 a.num - b.num 改成 b.num - a.num <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, i…

idea 使用 git

可以看见项目地址&#xff0c; git clone 地址 就可以拉新项目了 命令 git remote -v

JETBRAINS IDES 分享一个2099通用试用码,支持一键升级!CLion 2024 版

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

Linux 案例命令使用操作总结

在信息技术日新月异的今天&#xff0c;Linux以其开源、稳定、高效的特性&#xff0c;逐渐成为了众多专业人士的首选操作系统。然而&#xff0c;关于Linux知识的学习&#xff0c;却常常陷入一个误区——许多人认为&#xff0c;掌握Linux就是死记硬背各种命令和参数。这种观念&am…

测试萌新的Python学习pytest(六)

pytest pytest运行setup和teardown配置文件实现数据参数化测试报告插件集成思路 pytest 概念 pytest 是 python 的一种第三方的单元测试框架, 同自带的 unittest 测试框架类似, 相比于 unittest 框架使用起来更简洁, 更高效 安装 pip install pytest3.10校验 命令行输入 p…

nginx使用Gzip压缩提升请求效率

一. 使用Gzip压缩提升请求效率 完整压缩案例: http {# ....#gzip on; #开启后发现css,js等数据,就会就行压缩.#开启gzip压缩功能,目的:提高传输效率,节约带宽gzip on;#限制最小压缩,小于1字节文件不会压缩gzip_min_length 1;#定义压缩的级别(压缩比,…

8.基于鱼鹰优化算法(OOA)优化VMD参数(OOA-VMD)

代码原理 鱼鹰优化算法&#xff08;Osprey Optimization Algorithm, OOA&#xff09;是一种基于仿生学原理的启发式优化算法&#xff0c;它模拟了鱼鹰觅食的行为&#xff0c;通过调整搜索空间中的个体位置来优化目标函数。 鱼鹰优化算法可参考&#xff1a;鱼鹰优化算法(Ospre…

Spring Framework-IoC详解

IoC的概念和作用 在介绍Ioc之前&#xff0c;我们首先先了解一下以下内容 什么是程序的耦合 耦合性(Coupling)&#xff0c;也叫耦合度&#xff0c;是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度…

GEE案例分析——Sentinel-1数据的地形校正和斑点滤波Lee-sigma

Lee-Sigma滤波 Lee-Sigma滤波是一种用于处理合成孔径雷达(SAR)图像中斑点噪声的算法。它基于Lee滤波器的原理,并引入了Sigma滤波器的概念,以改进对噪声的抑制效果,同时尽量保持图像的细节。下面是Lee-Sigma滤波的基本原理和步骤: 1. **基本原理**:Lee滤波器是一种自适应…