day07--454.四数相加II+383. 赎金信+ 15. 三数之和+ 18. 四数之和

一、454.四数相加II

题目链接:https://leetcode.cn/problems/4sum-ii/
文章讲解:https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1Md4y1Q7Yh

1.1 初见思路

1.先统计两个数组的元素和,然后再统计剩下两个数组中满足条件情况

1.2 具体实现

class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int count=0;//先统计两个数组的元素和,然后再统计剩下两个数组中满足条件情况HashMap<Integer,Integer> map = new HashMap<>();for(int i=0;i<nums1.length;i++){for(int j=0;j<nums2.length;j++){int sum = nums1[i]+nums2[j];map.put(sum,map.getOrDefault(sum,0)+1);}}for(int i=0;i<nums3.length;i++){for(int j=0;j<nums4.length;j++){count+=map.getOrDefault(0-nums3[i]-nums4[j],0);}}return count;}
}

1.3 重难点

二、 383. 赎金信

题目链接:https://leetcode.cn/problems/ransom-note/description/
文章讲解:https://programmercarl.com/0383.%E8%B5%8E%E9%87%91%E4%BF%A1.html#%E6%80%9D%E8%B7%AF
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP

2.1 初见思路

定义数组,字符-'a’作为下标,value是该字符出现次数

2.2 具体实现

class Solution {public boolean canConstruct(String str1, String str2) {int[] arr = new int[26];//定义数组,字符-'a'作为下标,value是该字符出现次数char[] char1 = str1.toCharArray();char[] char2 = str2.toCharArray();for(char c:char2){arr[c-'a'] += 1;}for(char cc:char1){arr[cc-'a'] -=1;}for(int i:arr){if(i<0){return false;}}return true;}
}

2.3 重难点

  • 注意是哪个字符串是+1,哪个字符串逻辑是-1

三、 15. 三数之和

题目链接:https://leetcode.cn/problems/3sum/
文章讲解:https://programmercarl.com/0015.%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1GW4y127qo

3.1 初见思路

1.一个元素只能用一次
2.确定一个元素,剩下的问题就变成了求两数之和

但是上面这种思路怎么保证结果不重复
看完视频后,确定思路:排序+双指针
去重怎么实现?

3.2 具体实现

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result = new ArrayList<>();Arrays.sort(nums);// 找出a + b + c = 0// a = nums[i], b = nums[left], c = nums[right]for (int i = 0; i < nums.length; i++) {// 排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了if (nums[i] > 0) { return result;}if (i > 0 && nums[i] == nums[i - 1]) {  // 去重acontinue;}int left = i + 1;int right = nums.length - 1;while (right > left) {int sum = nums[i] + nums[left] + nums[right];if (sum > 0) {right--;} else if (sum < 0) {left++;} else {result.add(Arrays.asList(nums[i], nums[left], nums[right]));// 去重逻辑应该放在找到一个三元组之后,对b 和 c去重while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;right--; left++;}}}return result;}
}

3.3 重难点

  • 排序+双指针
  • 去重怎么实现?—》当找到一个满足条件的三元组后,对第2,3个数进行移动操作,即实现去重。

四、 18. 四数之和

题目链接:https://leetcode.cn/problems/4sum/
文章讲解:https://programmercarl.com/0018.%E5%9B%9B%E6%95%B0%E4%B9%8B%E5%92%8C.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1DS4y147US

4.1 初见思路

1.基于三数之和,三数之和在双指针外侧是一层for循环,那么四数之和是两层for循环

4.2 具体实现

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<Integer> resultList = new ArrayList<Integer>();List<List<Integer>> result = new ArrayList<List<Integer>>();if(nums==null || nums.length<4){return result;}//想用双指针就需要进行排序Arrays.sort(nums);for(int i=0;i<nums.length-3;i++){if(i>0 && nums[i]==nums[i-1]){continue;}for(int j=i+1;j<nums.length-2;j++){if(j>i+1 && nums[j]==nums[j-1]){continue;}int left = j+1;int right = nums.length-1;while(left>0 && left < right){int sum = nums[i]+nums[j]+nums[left]+nums[right];if(sum==target){result.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));left++;while(left<right && nums[left]==nums[left-1]){left++;}right--;while(left<right && nums[right]==nums[right+1]){right--;}}else if(sum<target){left++;}else{right--;}}}}return result;}
}

4.3 重难点

在这里插入图片描述

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

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

相关文章

【论文阅读】-- Omnisketch:高效的多维任意谓词高速流分析

Omnisketch&#xff1a;高效的多维任意谓词高速流分析 摘要1 引言2 预备知识及相关工作3 OMNISKETCH&#xff1a;使用任意谓词估计频率3.1 Sketch S0&#xff1a;Count-Min with rid-sets 用于估计带有谓词的查询3.2 Sketch S1 &#xff08;OmniSketch&#xff09;&#xff1a;…

使用ShinyCell展示你的单细胞数据

在我参与发表我的第一篇植物单细胞文章中&#xff0c;我用Shiny开发了一个简单的单细胞可视化网站&#xff0c;目前已经运行了5年了&#xff0c;有上万的访问&#xff0c;唯一的不足就是太简陋。我一直想着能不能找个一个更好的工具进行展示&#xff0c;最近发现了一个工具&…

嵌入式linux中内存管理基本原理

各位开发者,大家好,今天主要给大家分享一下,如何使用linux系统中的内存管理。 前面我们学习了很多Linux内存方面的知识,比如:虚拟地址空间,进程空间,内存映射,页表机制等,我们学了这么多知识,似乎对Linux内存似懂非懂,为什么会出现这样的问题?原因在于我们缺…

redis+lua实现分布式限流

redislua实现分布式限流 文章目录 redislua实现分布式限流为什么使用redislua实现分布式限流使用ZSET也可以实现限流&#xff0c;为什么选择lua的方式实现依赖lua脚本yaml代码实现 Jmeter压测 为什么使用redislua实现分布式限流 原子性&#xff1a;通过Lua脚本执行限流逻辑&am…

无人机RTMP推流EasyDSS直播平台推流成功,不显示直播按钮是什么原因?

互联网视频云平台/视频点播直播/视频推拉流EasyDSS支持HTTP、HLS、RTMP等播出协议&#xff0c;并且兼容多终端&#xff0c;如Windows、Android、iOS、Mac等。为了便于用户集成与二次开发&#xff0c;我们也提供了API接口供用户调用和集成。在无人机场景上&#xff0c;可以通过E…

[linux]基于Ubuntu24.04原内核6.8.0升级到6.9.0

物理机操作系统&#xff1a; 虚拟机操作系统&#xff1a; Ubuntu 24.04 下载地址&#xff1a; https://mirror.nju.edu.cn/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso VM版本信息&#xff1a; 内核源代码来源&#xff1a; https://ftp.sjtu.edu.cn/sites/ftp.kern…

四六级考前突击之主题词预测

考前主题词预测 时政类 Digital Economy 数字经济 (Digitalization数字化) Hong Kong Zhuhai-Macau Bridge 港珠澳大桥 Greater Bay Area 大湾区 Poverty Alleviation 扶贫 Anti-corruption campaign 反腐斗争 Rural Revitalization(注入活力) Strategy(战略,策略) 乡村振兴…

课设--学生成绩管理系统

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术核心 &#x1f349;引言 &#x1f348;标识 &#x1f348;背景 &#x1f348;项目概述 &#x1f348; 文档概述 &#x1f349;可行性分析的前提 &#x1f348;项目的要求 &#x1f348;项目的目标 &#x1f348;…

vue自定义一个回到顶部组件

1.首先创建一个backTop.vue页面&#xff1a; 页面有两个按钮&#xff0c;一个回到顶部按钮&#xff0c;一个刷新按钮(showRefresh:false将刷新按钮隐藏)&#xff0c;实现效果如下&#xff1a; 代码解析&#xff1a; domName:需要监听滚动的dom类名&#xff0c;不传默认监听bod…

搜维尔科技:特斯拉称工厂内有两台人形机器人开始自主工作

搜维尔科技消息&#xff0c;据外电报道&#xff0c;特斯拉声称&#xff0c;其目前拥有两台 Optimus 人形机器人在工厂内自主工作&#xff0c;这尚属首次。 如果目前这场薪酬方案混乱有什么好处的话&#xff0c;那就是特斯拉几乎看起来又有了一个公关部门。 当然&#xff0c;其…

记录open62541简单有效的编译生成.c和.h文件【OPCUA开源库】

一、下载和安装CMake 虽然说可以通过下面命令安装CMake,但是安装CMake时,通常会安装来自你的操作系统的软件仓库中的版本,这个版本可能不是最新的 sudo apt-get install cmake 如果安装后发现CMake版本低于CMake 3.13是没有办法进行编译的 接下来通过编译源码来升级高版本…

基数排序O(n)时间复杂度的实现

基数排序O(n)时间复杂度的实现 前言 之前写过一篇文章六种常见排序算法分析与实现&#xff0c;讲了六种常见的排序算法&#xff0c;但是没有了解到桶排序&#xff0c;基数排序这两种排序算法&#xff0c;今天刷LeetCode发现了这两种算法&#xff0c;本文先来聊聊基数排序的思…

Ubuntu字体相关

Ubuntu字体相关 解决字体相关问题 Windows字体 sudo apt install font-manager sudo apt update && sudo apt install ttf-mscorefonts-installer # 安装字体至系统范围 sudo cp *.ttf /usr/local/share/fonts/ sudo cp *.ttc /usr/local/share/fonts/ # 重建字体缓…

06 SpringBoot 配置文件详解-application.yaml

Spring Boot 提供了大量的自动配置&#xff0c;极大地简化了spring 应用的开发过程&#xff0c;当用户创建了一个 Spring Boot 项目后&#xff0c;即使不进行任何配置&#xff0c;该项目也能顺利的运行起来。当然&#xff0c;用户也可以根据自身的需要使用配置文件修改 Spring …

以太坊网络中为什么要设置Gas上限

以太坊网络中的Gas上限&#xff08;Gas Limit&#xff09;是一个重要的机制&#xff0c;它主要出于以下几个目的&#xff1a; 防止无限循环和拒绝服务攻击&#xff08;DoS&#xff09;&#xff1a; Gas上限防止了智能合约中的无限循环&#xff0c;这可以保护网络免受恶意合约的…

vue3 vant4 仿京东分类功能实现

Ⅰ- 壹 - 功能展示和使用需求 需求描述 基于vant 实现,仿京东分类功能实现样式交互等基本实现,细节可能需要优化 地址 https://gitee.com/wswhq/vue3-vant-temp/tree/master/src/view/ClassIfication 功能展示 Ⅱ - 贰 - 封装思路 不表述了自己看代码吧 Ⅲ - 叁 - 使用 …

TikTok账号被限流的原因及解决方法

TikTok账号被限流无疑是众多内容创作者面临的一大难题。流量骤减&#xff0c;账号活跃度下降&#xff0c;究竟是什么原因导致限流呢&#xff1f;本文将深入分析TikTok限流的几大成因&#xff0c;并提供一些解决方案&#xff0c;特别是推荐海外云手机这一工具&#xff0c;有效避…

c++工程实践——实际工程中的文件读取和日期处理的小问题

一、问题 在实际开发中遇到了两个小问题&#xff0c;一个是文件流的读写中的长度和结尾判断;另外一个是C11库std::chrono::duration的数据类型的问题。这两个问题导致了两个结果&#xff1a; 1、流结尾判断不准确&#xff0c;多读一帧导致长度判断恒为正确&#xff0c;文件不加…

你认为这个项目的难点和亮点是什么?

你认为这个项目的难点和亮点是什么&#xff1f; 好的&#xff0c;面试官&#xff0c;这个项目对于我来说还是有一定的挑战性的&#xff0c;在此过程中&#xff0c;我也成长和学习到了不少。亮点和难点方面我主要从三个方面来阐述&#xff0c;一个是业务方面&#xff0c;一个是整…

若依微服务Docker部署验证码出不来怎么办?

最近,有许多人反馈在使用 Docker 部署若依微服务项目时,遇到验证码无法显示的问题。本文将重点介绍解决该问题的注意事项以及整个项目的部署流程。之前我们也撰写过微服务部署教程,本文将在此基础上进行优化和补充。你也可以参考我之前写的部署教程:https://yang-roc.blog.…