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

2024-06-14 23:20

本文主要是介绍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 重难点

在这里插入图片描述

这篇关于day07--454.四数相加II+383. 赎金信+ 15. 三数之和+ 18. 四数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061790

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

javaScript日期相加减例子

当前时间加上2天 var d = new Date(“2015-7-31”); d.setDate(d.getDate()+2); var addTwo=d.getFullYear()+”年”+(d.getMonth()+1)+”月”+d.getDate()+”日”; “控制台输出===============”+”当前日期加2天:”+addTwo; 使用这种方法,月份也会给你计算.

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

15 组件的切换和对组件的data的使用

划重点 a 标签的使用事件修饰符组件的定义组件的切换:登录 / 注册 泡椒鱼头 :微辣 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli