当前位置: 首页 > news >正文

LeetCode ACM模式——哈希表篇(一)

刷题顺序及部分思路来源于代码随想录,网站地址:https://programmercarl.com

 部分思路来源于力扣官方题解,作者主页:https://leetcode.cn/u/leetcode-solution/

 

242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例:

输入: s = "anagram", t = "nagaram"
输出: true
import java.util.Scanner;/*** @author light* @Description 有效字母异位词* @create 2023-08-01 13:52*/
public class IsAnagramTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);String str1=input.next();String str2=input.next();boolean res=isAnagram(str1,str2);System.out.println(res);}public static boolean isAnagram(String s, String t) {if(s.length()!=t.length()){return false;}int[] nums=new int[26];for (int i = 0; i < s.length(); i++) {nums[s.charAt(i)-'a']++;}for (int i = 0; i < t.length(); i++) {nums[t.charAt(i)-'a']--;if(nums[t.charAt(i)-'a']<0){return false;}}return true;}
}

49. 字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
import java.util.*;/*** @author light* @Description 字母异位词分组*** 方法一:排序* 由于互为字母异位词的两个字符串包含的字母相同,* 因此对两个字符串分别进行排序之后得到的字符串一定是相同的,* 故可以将排序之后的字符串作为哈希表的键。* @create 2023-08-01 14:37*/
public class GroupAnagramsTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);String[] strs=input.next().split(",");List<List<String>> res=groupAnagrams(strs);System.out.println(res);}public static List<List<String>> groupAnagrams(String[] strs){Map<String,List<String>> map=new HashMap<>();for(String str:strs){char[] array=str.toCharArray();Arrays.sort(array);String key=Arrays.toString(array);List<String> list=map.getOrDefault(key,new ArrayList<>());list.add(str);map.put(key,list);}return new ArrayList<List<String>>(map.values());}
}

438. 找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;/*** @author light* @Description 找到字符串中所有字母异位词** 给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。* 不考虑答案输出的顺序。* 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。** 滑动窗口解法* 根据题目要求,我们需要在字符串 s 寻找字符串 p 的异位词。* 因为字符串 p 的异位词的长度一定与字符串 p 的长度相同,所以我们可以在字符串 s 中* 构造一个长度为与字符串 p 的长度相同的滑动窗口,并在滑动中维护窗口中每种字母的数量;* 当窗口中每种字母的数量与字符串 p 中每种字母的数量相同时,则说明当前窗口为字符串 p 的异位词。** 作者:力扣官方题解* 链接:https://leetcode.cn/problems/find-all-anagrams-in-a-string/solutions/1123971/zhao-dao-zi-fu-chuan-zhong-suo-you-zi-mu-xzin/* 来源:力扣(LeetCode)* @create 2023-08-01 15:01*/
public class FindAnagramsTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);String s=input.next();String p=input.next();List<Integer> list=findAnagrams(s,p);System.out.println(list);}public static List<Integer> findAnagrams(String s, String p) {if(s.length()<p.length()){return new ArrayList<Integer>();}int[] sCount=new int[26];int[] pCount=new int[26];List<Integer> list=new ArrayList<>();for (int i = 0; i <p.length(); i++) {sCount[s.charAt(i)-'a']++;pCount[p.charAt(i)-'a']++;}if(Arrays.equals(sCount,pCount)){list.add(0);}for (int i = 0; i < s.length() - p.length(); i++) {//维护滑动窗口sCount[s.charAt(i)-'a']--;sCount[s.charAt(i+p.length())-'a']++;if(Arrays.equals(sCount,pCount)){list.add(i+1);}}return list;}
}

349. 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;/*** @author light* @Description 两个数组的交集* @create 2023-08-01 17:34*/
public class IntersectionTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);int n=input.nextInt();int[] nums1=new int[n];int m=input.nextInt();int[] nums2=new int[m];for (int i = 0; i < n; i++) {nums1[i]=input.nextInt();}for (int i = 0; i < m; i++) {nums2[i]=input.nextInt();}int[] res=intersection(nums1,nums2);System.out.println(Arrays.toString(res));}public static int[] intersection(int[] nums1, int[] nums2) {Set<Integer> set=new HashSet<>();Set<Integer> res=new HashSet<>();for(int num:nums1){set.add(num);}for(int num:nums2){if(set.contains(num)){res.add(num);}}int[] arr=new int[res.size()];int i=0;for(int num:res){arr[i++]=num;}return arr;}
}

350. 两个数组的交集 II

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;/*** @author light* @Description 两个数组的交集 II* @create 2023-08-01 18:04*/
public class IntersectTest {public static void main(String[] args) {Scanner input=new Scanner(System.in);int n=input.nextInt();int[] nums1=new int[n];int m=input.nextInt();int[] nums2=new int[m];for (int i = 0; i < n; i++) {nums1[i]=input.nextInt();}for (int i = 0; i < m; i++) {nums2[i]=input.nextInt();}int[] res=intersect(nums1,nums2);System.out.println(Arrays.toString(res));}public static int[] intersect(int[] nums1, int[] nums2) {Map<Integer,Integer> map=new HashMap<>();for(int num:nums1){map.put(num,map.getOrDefault(num,0)+1);}int[] res=new int[nums1.length];int i=0;for(int num:nums2){if(map.containsKey(num)&&map.get(num)>0){res[i++]=num;map.put(num,map.get(num)-1);}}return Arrays.copyOfRange(res,0,i);}
}

相关文章:

LeetCode ACM模式——哈希表篇(一)

刷题顺序及部分思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 部分思路来源于力扣官方题解&#xff0c;作者主页&#xff1a;https://leetcode.cn/u/leetcode-solution/ 242. 有效的字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个…...

WPF实战学习笔记31-登录界面全局通知

UI添加消息聚合器 <md:Snackbarx:Name"LoginSnakeBar"Grid.ColumnSpan"2"Panel.ZIndex"1"MessageQueue"{md:MessageQueue}" />注册提示消息 文件&#xff1a;Mytodo.Views.LoginView.cs构造函数添加内容 //注册提示消息 aggre…...

通用商城项目(中)

金山编译器出问题了。下面段落标号全出问题了&#xff0c;排版也出问题了。懒得改了。 使用对象存储OSS&#xff0c;保存品牌logo 新建Module&#xff0c;提供上传、显示服务 有些不明所以的&#xff0c;按照steinliving-commodity配置了一通pom.xml 新建application.yml&…...

谨慎使用JSON.stringify

谨慎使用JSON.stringify 为了避免因为对象是引用类型而造成的数据源污染&#xff0c;我们通常使用 JSON.stringify 将其转换为字符串&#xff0c;而后通过JSON.parse方法将字符串转化一个新对象来实现深拷贝。但是在这个过程中也会存在一些问题&#xff0c;本文就介绍一下使用…...

驱动开发day8

编写LED灯的驱动&#xff0c;使用GPIO子系统&#xff0c;里面添加按键的中断处理 1.应用程序发送指令控制LED亮灭 2.按键1 按下&#xff0c;led1电位反转 按键2按下&#xff0c;led2电位反转 按键3 按下&#xff0c;led3电位反转 驱动程序 #include <linux/init.h> #i…...

CAS 机制

问题分析与思考&#xff1a; CAS 是 Java 中 Unsafe 类里面的方法&#xff0c;它的全称是 CompareAndSwap&#xff0c;比较并交换 的意思。 它的主要功能是能够保证在多线程环境下&#xff0c;对于共享变量的修改的原子性。 举个例子&#xff0c;比如说有这样一个场景&#xff…...

#P1003. [NOIP2009普及组] 道路游戏

题目描述 小新正在玩一个简单的电脑游戏。 游戏中有一条环形马路&#xff0c;马路上有 nn 个机器人工厂&#xff0c;两个相邻机器人工厂之间由一小段马路连接。小新以某个机器人工厂为起点&#xff0c;按顺时针顺序依次将这 nn 个机器人工厂编号为 1\sim n1∼n&#xff0c;因…...

python-网络爬虫.regular

regular 正则表达式 (regular expression) 正则表达式(regular expression)描述了一种字符串匹配的模式 &#xff08;pattern&#xff09;&#xff0c; 可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串 中取出符合某个条件的子串等。 正则表达式是由普通…...

手动搭建gateway,项目集成gateway实现Token效果

目录 背景步骤1、首先创建springboot项目2、引入依赖3、配置文件&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff08;超级重要&#xff01;&#xff01;&#xff01;根据自己的需要进行配置&#xff09;4、相关类我们在服务中进行的白名单中接口的操作如…...

linux下SVN服务器搭建

在本教程中&#xff0c;我们将介绍如何在Linux系统下搭建Subversion&#xff08;SVN&#xff09;服务器。Subversion是一种流行的版本控制系统&#xff0c;它允许多个人在同一项目上进行协作&#xff0c;同时避免了他们各自的更改发生冲突。 安装SVN 在大多数Linux发行版中&am…...

技术等级 TRL 定义

“不同环境、不同目标下TRL表述不一样” 技术等级 TRL 定义 TRL1 基本原理提出和发现 TRL2 技术应用研究 TRL3 完成概念验证&#xff0c;如叶栅试验、燃烧室头部试验等 TRL4 完成模拟部件试验&#xff0e;如压气机性能试验&#xff0c;燃烧室扇形试验 TRL5 完…...

DHorse v1.3.0 发布,基于k8s的发布平台

综述 DHorse是一个简单易用、以应用为中心的云原生DevOps系统&#xff0c;具有持续集成、持续部署、微服务治理等功能&#xff0c;无需安装依赖Docker、Maven、Node等环境即可发布Java、Vue、React应用&#xff0c;主要特点&#xff1a;部署简单、操作简洁、功能快速。 新增特…...

Redis - 缓存的双写一致性

概念&#xff1a; 当修改了数据库的数据也要同时更新缓存的数据&#xff0c;缓存和数据库的数据要保持一致 那为什么会有不一致的情况呢&#xff1f; 如果不追求一致性&#xff0c;正常有两种做法 先修改数据库 后删除旧的缓存先删除旧的缓存 再修改数据库 我们以先删除旧的…...

opencv03-Mat矩阵API的使用

opencv03-Mat矩阵API的使用 构造方法(具体介绍看API文档) int main() {Mat m1 Mat(200, 100, CV_8UC1);imshow("o1", m1);Mat m2 Mat(Size(100, 200), CV_8UC1);imshow("o2", m2);Mat m3 Mat(200, 100, CV_8UC3, Scalar(255, 0, 0));imshow("o3&…...

2023届浙江大学MPA提面A资格经验总结分享

本人是去年报考的浙大MPA项目&#xff0c;并通过提面获得了A资格&#xff0c;新一年浙大MPA项目提前批面试已经开始了&#xff0c;受达立易考周老师邀请来分享下我的提面经验&#xff0c;希望我的经验能对还在迷茫中的小伙伴有所帮助。 点开提面通知&#xff0c;首先看到…...

BugKu CTF(杂项篇MISC)—想要种子吗

BugKu CTF(杂项篇MISC)—想要种子吗 提 示: 描 述:flag{} 题目下载后是一张图片&#xff0c;打开如下。 一、工具 十六进制编辑器010 editor kali系统文件分离工具binwalk或者foremost 维吉尼亚密码 STEGHIDE图片隐写工具 文章所需的软件下载地址 ARCHPR压缩包密码破解…...

类之间的关系

1、类关系 继承、实现、依赖、组合、聚合 继承&#xff1a;一个类继承另一个类&#xff1b; 实现&#xff1a;一个类实现另一个接口&#xff1b; 依赖&#xff1a;一个类作为另一个的局部变量&#xff0c;方法的参数&#xff0c;临时对象等&#xff1b; 组合&#xff1a;一个类…...

【蓝图】p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统

p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统 p40对象引用、变量有效性p41实现键盘控制物体自转创建bool值控制旋转实现通过键盘控制自转 p42p43简单点名系统Get All Actors Of Class&#xff08;获得场景中所有该类的actor演员&#xff09;getFor Each L…...

vscode设置远程登录和免密登录

首先&#xff0c;我们去官网下载VScode 安装过程比较简单&#xff0c;大家自行安装即可&#xff0c;注意建议安装在除C盘外的其他盘中。 安装完成后&#xff0c;打开我们下载好的VScode&#xff0c;点击左侧的Extensions选项&#xff0c;搜索Remote&#xff0c;Install第一项R…...

今日头条面试真题及答案,软件测试工程师面试秘籍

试题1&#xff0e;在浏览器地址栏里输入一个网址&#xff0c;接下来会发生什么&#xff1f; 答案&#xff1a;发生的操作如下。 &#xff08;1&#xff09;浏览器查找该网址的IP地址。 &#xff08;2&#xff09;浏览器根据解析得到的IP地址向Web服务器发送一个HTTP请求。 &am…...

避坑指南:ESP32 ADC采样时这些操作会让数据‘丢帧’(WiFi冲突、看门狗、串口打印)

ESP32 ADC采样稳定性实战&#xff1a;规避数据丢失的6个关键策略 在物联网和嵌入式开发领域&#xff0c;ESP32因其出色的无线连接能力和丰富的外设资源成为热门选择。但当开发者将其ADC&#xff08;模数转换器&#xff09;功能用于高精度数据采集时&#xff0c;常常会遇到采样数…...

录音转文字在线版有哪些?这几款免费录音转文字在线工具怎么选?

很多人做录音转文字的时候默认用专业级的转录服务,其实像提词匠这样的轻量工具已经够用了。特别是如果你只是偶尔需要把会议录音、课堂笔记、视频素材转成文字,不必非要上手深度学习复杂的专业软件。下面我梳理了目前市面上主流的录音转文字在线版工具,既有微信小程序也有网页版…...

Adobe-GenP 3.0终极指南:5分钟快速激活Adobe全系列创意软件

Adobe-GenP 3.0终极指南&#xff1a;5分钟快速激活Adobe全系列创意软件 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款专为Adobe Creative Cloud用…...

RISC-V双发射混合运算优化技术COPIFT解析

1. RISC-V双发射混合运算优化技术概述在当今处理器架构设计中&#xff0c;能效比已经超越单纯性能指标成为首要考量因素。RISC-V作为开源指令集架构&#xff0c;凭借其模块化设计和可扩展性&#xff0c;为能效优化提供了独特优势。双发射(Dual-Issue)技术通过每个时钟周期发射两…...

Adobe-GenP 3.0:解锁Adobe全家桶功能的5分钟终极指南 [特殊字符]

Adobe-GenP 3.0&#xff1a;解锁Adobe全家桶功能的5分钟终极指南 &#x1f680; 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP 3.0是一款强大的Adobe C…...

03-eMMC性能实战解析:速率模式、引脚配置与上电时序的协同设计

1. eMMC高速模式实战&#xff1a;HS400与HS200的带宽对决 在嵌入式系统设计中&#xff0c;eMMC存储的性能直接影响设备响应速度和用户体验。实测数据显示&#xff0c;三星KLMCG2KETM-B041芯片在HS400模式下能达到269.4MB/s的读取速度&#xff0c;而东芝THGBMDG5D1LBAIL同模式下…...

开源镜像站架构与部署实战:APT、Docker、PyPI同步与性能优化

1. 项目概述&#xff1a;一个面向中文开发者的开源镜像站如果你是一名在国内的开发或运维工程师&#xff0c;对“镜像站”这个词一定不会陌生。无论是安装Python的pip包&#xff0c;还是更新Ubuntu的apt源&#xff0c;又或是拉取Docker镜像&#xff0c;我们常常会受限于网络环境…...

胡桃讲编程|虚拟歌手星烁 R1 开发日志:技术落地清透少女音,九州网络技术研发全纪实

作者&#xff1a;龙沅可 大家好&#xff0c;我是胡桃&#xff5e;今天不谈算法与代码技巧&#xff0c;带大家沉浸式复盘一次虚拟歌手技术落地项目&#xff01;由空晶宇宙全额投资并提供完整人设、核心资料&#xff0c;九州网络&#xff08;组织&#xff09;承接技术研发与模型…...

Excel MCP服务器:用AI自然语言直接查询分析本地表格数据

1. 项目概述&#xff1a;当Excel遇上AI&#xff0c;一个MCP服务器如何打通数据孤岛 如果你和我一样&#xff0c;每天的工作都离不开Excel&#xff0c;那你一定对这样的场景不陌生&#xff1a;财务同事发来一份最新的销售数据表&#xff0c;你需要从中提取特定产品的季度增长率…...

社区思想家的观点阵地——开放性技术话题的引爆策略

技术讨论不是吵架,而是一场有规则的辩论赛。观点是你的立场,论据是你的弹药,而评论区就是攻防交锋的战场。 一、引言:技术界的辩论家 在CSDN的技术社区里,有这样一群人——他们不满足于被动接收信息,而是热衷于抛出观点、引发讨论、在交锋中碰撞思想火花。他们就是社区思…...