双非本科准备秋招(9.2)——力扣哈希

1、383. 赎金信

跟昨天的题大同小异,因为只有26个字母,所以可以建个有26个坑位的数组。

做完昨天的题目,这个题没啥新意。

class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] hashTable = new int[26];char[] chars1 = ransomNote.toCharArray();char[] chars2 = magazine.toCharArray();for(char c : chars2){hashTable[c - 'a']++;}for(char c : chars1){if(hashTable[c - 'a'] == 0){return false;}hashTable[c-'a']--;}return true;}
}

2、454. 四数相加 II

开始上强度了,200个数据,直接暴力,200的4次方不行。

可以把四层for拆成两层,把nums1和nums2求和得到的数据放到它们的哈希表中,value记录出现的次数。这样就拆成两个哈希表了,遍历一个哈希表,那么-key就是另一个哈希表中需要存在的值,如果存在,这两个哈希表的value之积就是一个解。

举例说明:key1=-1, value1=2 和 key2=1, value=3 

那是不是意味着有:-1   -1,  1  1  1。对每个-1来说,都能找到3个1。所以有2*3个。

class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {HashMap<Integer, Integer> map1 = new HashMap<>();HashMap<Integer, Integer> map2 = new HashMap<>();int ans = 0;merge(nums1, nums2, map1);merge(nums3, nums4, map2);for(int x : map1.keySet()){int target = -x;if(map2.containsKey(target)){ans += map1.get(x)*map2.get(target);}}return ans;}public void merge(int[] a1, int[] a2, HashMap<Integer, Integer> map){for(int x : a1){for(int y : a2){int n = x+y;if(map.containsKey(n)){map.put(n, map.get(n)+1);}else{map.put(n, 1);}}}}
}

3、15. 三数之和

第一次是这么做的,不对。

思路来自上一题,但是我再想如何去重呢?总不能查一次List中有没有nums[i]、nums[j]、nums[k]的组合吧,想了很久没想出来。

class Solution {public List<List<Integer>> threeSum(int[] nums) {ArrayList<List<Integer>> list = new ArrayList<>();HashMap<Integer, Integer> map = new HashMap<>();for(int i = 0; i < nums.length; i++){//记录最后一次的下标map.put(nums[i], i);}for(int i = 0; i < nums.length; i++){for(int j = i+1; j < nums.length; j++){if(map.containsKey(-nums[i]-nums[j])){int k = map.get(-nums[i]-nums[j]);if(k != i && k != j){list.add(List.of(nums[i], nums[j], nums[k]));}}}}return list;}
}

参考了另一种巧妙的思路,双指针。

先给数组排个序。

然后遍历数组,i就是遍历的元素,j和k是双指针,通过移动j和k来取得答案。

思路到这里,那么和上面的代码没啥区别,所以核心还是想如何去重。

因为是排完序的,那么我只需要保证i和上一个元素不相等即可,如下图,如果i和上一个元素相等,说明接下来得到的值肯定都是重复的。

然后是对nums[j]和nums[k]去重,比如这种的,会找到两组(-1, 0, 1)。

所以每次找完之后,都要不停地移动j,直到与上一个元素不同,k同理。

class Solution {public List<List<Integer>> threeSum(int[] nums) {ArrayList<List<Integer>> list = new ArrayList<>();int j = 0, k = 0;Arrays.sort(nums);for(int i = 0; i < nums.length-2; i++){if(nums[i] > 0){//第一个都大于0,那肯定加不成0了。break;}if(i > 0 && nums[i] == nums[i-1]){//去重nums[i]continue;}j = i+1;k = nums.length-1;while(j < k){if(nums[j] + nums[k] + nums[i] == 0){list.add(List.of(nums[i], nums[j], nums[k]));while(j<nums.length-1 && nums[j] == nums[j+1]) j++;//去重nums[j]while(k>i && nums[k] == nums[k-1]) k--;//去重nums[k]j++;k--;}else if(nums[j] + nums[k] + nums[i] > 0){k--;}else if(nums[j] + nums[k] + nums[i] < 0){j++;}}}return list;}
}

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

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

相关文章

从0开始搭建若依微服务项目 RuoYi-Cloud(保姆式教程 一)

掌握陌生项目解读技巧 掌握若依(RuoYi-Cloud)框架 掌握SpringCloud Alibaba体系项目开发套路&#xff0c;结合我之前所有企业项目来学习就知道有多么简单。 一、框架介绍 1. 简介 一直想做一款后台管理系统&#xff0c;看了很多优秀的开源项目但是发现没有合适的。于是利用空…

Python中如何将字符串变成数字?

字符串和数字是Python中常见的数据类型&#xff0c;而且在撰写Python程序的时候&#xff0c;也经常会遇到需要将字符串转换为数字的情况&#xff0c;那么Python中如何将字符串变成数字?有多种方法可以使用&#xff0c;接下来一起来看看具体内容介绍。 1、使用int()函数 int(…

使用 Node.js 和 Cheerio 爬取网站图片

写一个关于图片爬取的小案例 爬取效果 使用插件如下&#xff1a; {"dependencies": {"axios": "^1.6.0","cheerio": "^1.0.0-rc.12","request": "^2.88.2"} }新建一个config.js配置文件 // 爬取图片…

Linux下Mysql的小版本升级

1、查看当前 MySQL 版本 [rooticoolkj bin]# cd /usr/local/mysql/bin [rooticoolkj bin]# ./mysql -V ./mysql Ver 8.0.30 for Linux on x86_64 (MySQL Community Server - GPL) 2、 查看系统版本 [rooticoolkj bin]# lsb_release -a LSB Version: :core-4.1-amd64:cor…

索引概述(一)

1. 索引是啥&#xff1f; 在关系数据库中&#xff0c;索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构。可以比喻为目录&#xff0c;能快速定位到对应章节。 2. 索引目的 加快查询速度。 3. 有哪些索引&#xff1f; 单列索引 组合索引 4. 索…

Git 教程 | 将本地修改后的文件推送到 Github 指定远程分支上

Git 是一种分布式版本控制系统&#xff0c;用于敏捷高效地处理任何大小的项目。它是由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的开源版本控制软件。Git 的本地克隆就是一个完整的版本控制存储库&#xff0c;无论脱机还是远程都能轻松工作。开发人员会在本地提交其工…

fastjson和httpclient的基本使用

fastjson alibaba的fastjson来处理对象首先fastjson主要有两类对象 JSONObject JSONObject对象&#xff0c;可以看做是一个Object对象 JSONObject jsonObject new JSONObject(); jsonObject.put("username","admin"); jsonObject.put("password&…

阿里十年 “帕鲁” 手把手带你学习 Java 常见并发容器

阿里十年 “帕鲁” 手把手带你学习 Java 常见并发容器 文章目录 阿里十年 “帕鲁” 手把手带你学习 Java 常见并发容器ConcurrentHashMapCopyOnWriteArrayListConcurrentLinkedQueueBlockingQueueBlockingQueue 简介ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueu…

计算机设计大赛 推荐系统设计与实现 协同过滤推荐算法

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 推荐系统设计与实现 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1…

PyTorch2ONNX-分类模型:速度比较(固定维度、动态维度)、精度比较

图像分类模型部署: PyTorch -> ONNX 1. 模型部署介绍 1.1 人工智能开发部署全流程 #mermaid-svg-bAJun9u4XeSykIbg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bAJun9u4XeSykIbg .error-icon{fill:#552222;}…

现浇混凝土与后浇混凝土的区别与优缺点比较

现浇混凝土与后浇混凝土的区别与优缺点比较 一、现浇混凝土 现浇混凝土又称“同步浇筑混凝土”&#xff0c;是指在混凝土模板安装完成后&#xff0c;直接将混凝土灌入到模板中浇筑成型的过程。现浇混凝土的特点是施工成功率高、周期短、工程质量好&#xff0c;因此广泛应用于…

2023量子科技十大用例 | 光子盒年度系列

随着量子科技的不断突破&#xff0c;量子计算、量子通信、量子测量等应用场景逐渐向纵深拓展&#xff0c;量子产业呈现出较好的发展势头。 量子计算的发展比以往任何时候都更加迅速&#xff0c;这提醒我们&#xff0c;这项看似‘高冷’的前沿科技&#xff0c;已悄然应用于不少领…

使用IconFont实现矢量图标(Avalonia)

使用IconFont实现矢量图标(Avalonia) IconFont可以自己在阿里图标库收藏好&#xff0c;然后打包下载&#xff0c;这个就不在这里进行描述了&#xff0c;如果不知道怎么生成图标项目以及打包下载&#xff0c;可以先自己百度。 App.axaml中进行载入 <Application.Resources…

【链表】-Lc206-反转链表(三大指针)

写在前面 最近想复习一下数据结构与算法相关的内容&#xff0c;找一些题来做一做。如有更好思路&#xff0c;欢迎指正。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.代码 写在后面 一、场景描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反…

PAM4(4 级脉冲幅度调制)

PAM4 正文简介PAM4 的优势 正文 简介 全称 pulse-amplitude modulation 4 level。PAM4 是一个多级信号调制&#xff0c;它使用四种不同的信号等级&#xff0c;分别为 0&#xff0c;1&#xff0c;2&#xff0c;3。每一个信号等级可以表示 2 比特的逻辑信息。 PAM4 的优势 在…

14.java集合

文章目录 概念Collection 接口概念示例 Iterator 迭代器基本操作&#xff1a;并发修改异常增强循环遍历数组&#xff1a;遍历集合&#xff1a;遍历字符串&#xff1a;限制 list接口ListIteratorArrayList创建 ArrayList&#xff1a;添加元素&#xff1a;获取元素&#xff1a;修…

八、MySQL事务和SQL优化

1 什么是事务 Transaction&#xff0c;使我们数据库内最小且不可再分的单元。通常一个事务对应一个完整的业务(例如银行账户转账业务&#xff0c;该业务就是一个最小的工作单元)。一个完整的业务需要批量的DML(INSERT 、UPDATE、DELETE)语句共同联合完成。事务只和DML语句有关…

Js设计模式

1、简介 设计模式总的来说是一个抽象的概念&#xff0c;是软件开发人员在开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 2、工厂模式 工厂模式是用来创建对象的一种最常用的设计模式。我们不暴露创建对…

堡垒机是什么:如何帮助企业提高网络安全防护

引言 网络安全是当今企业面临的一个重大挑战&#xff0c;尤其是对于那些拥有大量敏感数据和业务系统的企业。一旦遭受黑客攻击或内部人员泄露&#xff0c;企业可能会遭受巨大的经济损失和声誉损害。因此&#xff0c;企业需要采取有效的措施来保护自己的网络资源&#xff0c;防…

计算机设计大赛 基于图像识别的跌倒检测算法

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于图像识别的跌倒检测算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…