双非本科准备秋招(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配置文件 // 爬取图片…

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

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

阿里十年 “帕鲁” 手把手带你学习 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;}…

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

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

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

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

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、工厂模式 工厂模式是用来创建对象的一种最常用的设计模式。我们不暴露创建对…

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

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

金融行业现场故障处理实录

KL银行现场服务记录—HA故障 服务时间 2019年9月10日星期二 14&#xff1a;40 到2019年9月11日星期三 0&#xff1a;30 服务内容 排查redhat RHEL 6.4 一个节点cman启动故障。 &#xff08;1&#xff09;、查看系统日志&#xff1b; &#xff08;2&#xff09;、查看ha日志…

跟着pink老师前端入门教程-day13

品优购案例 一、品优购项目规划 1. 品优购项目整体介绍 项目名称&#xff1a;品优购 项目描述&#xff1a;品优购是一个电商网站&#xff0c;我们要完成 PC 端首页、列表页、注册页面的制作 2. 品优购项目学习目的 1. 电商类网站比较综合&#xff0c;里面需要大量的布…

如何使用Python Flask搭建一个web页面并实现远程访问

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架&#xff0c;让我们可以使用Python语言快速实现一个网站或Web服务&#xff0c;本期教程…

2014年苏州大学837复试机试C/C++

2014年苏州大学复试机试 要求 要求用C/C编程&#xff1b;对程序中必要的地方进行注释。上机规则 请在电脑桌面上新建一个文件夹文件夹名为考试姓名&#xff08;中文&#xff09;&#xff1b;考试完毕后&#xff0c;将所编写的文件放在上述文件中。 第一题&#xff08;20分&…

linux 运行vue项目

1&#xff1a;在本地电脑 项目跟目录 执行 npm run build 在根目录生成文件夹 dist 2&#xff1a;复制dist 到linux 上 /usr/vuespace/ledger-web/dist 3: 配置nginx server {listen 443 ssl;server_name tz.i569.cn; #填写绑定证书的域名ssl_certificate /etc/nginx/myconf…

如何搭建开源笔记Joplin服务并实现远程访问本地数据

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…

【STM32】快速搭建工程

1. 快速生成工程 2.下载DFP包或者根据已有DFP包安装 3.拷贝现有工程的操作系统&#xff0c;应用层代码 debug 就完成最新工程的快速搭建 4.编译发现如下图 5.修改完这个报错&#xff0c;新工程建立基本完成&#xff0c;如果有其他错误&#xff0c;缝缝补补就可 比如 Main.c文…