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

使用Set和Map解题思路

前言

Set和Map这两种数据结构,在解决一些题上,效率很高。跟大家简单分享一些题以及如何使用Set和Map去解决这些题目。

题目链接

136. 只出现一次的数字 - 力扣(LeetCode)

138. 随机链表的复制 - 力扣(LeetCode)

旧键盘 (20)__牛客网

692. 前K个高频单词 - 力扣(LeetCode)

解题思路

一些题目的代码实现 

import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class Test1 {//获取单词出现了多少次public static void main(String[] args) {String[] words={"Maybe","Maybe","hello","happy","sadness"};Map<String,Integer> map=countword(words);//使用map.entrySet()遍历mapSet<Map.Entry<String,Integer>> entrySet=map.entrySet();//entrySet里面放的是Map.Entry<k,v>类型的for(Map.Entry<String,Integer> s:entrySet){System.out.println("key "+s.getKey()+" "+"val "+s.getValue());}}private static Map<String,Integer> countword(String[] words) {Map<String,Integer> map=new HashMap<>();//统计每个单词出现了多少次for(String s:words){if(map.get(s)==null){//则没有出现过一次map.put(s,1);}else{int val=map.get(s);map.put(s,val+1);}}return map;}
}
import java.util.HashSet;
import java.util.Locale;
import java.util.Scanner;
import java.util.Set;public class Test2 {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) {//这个是应该被输入的String a = in.nextLine();//这个是实际上被输入的String b = in.nextLine();a=a.toUpperCase();b=b.toUpperCase();Set<Character> set=new HashSet<>();for(int i=0;i<b.length();i++){char ch=b.charAt(i);set.add(ch);}Set<Character> set1=new HashSet<>();for(int i=0;i<a.length();i++){char ch=a.charAt(i);if(!set.contains(ch)&&!set1.contains(ch)){set1.add(ch);System.out.print(ch);}}}}
}
import java.util.*;public class Test3 {public List<String> topKFrequent(String[] words, int k) {Map<String,Integer> map=new HashMap<>();//统计单词出现的次数for(String word:words){if(map.get(word)==null){map.put(word,1);}else{int val=map.get(word);map.put(word,val+1);}}//成为Top-k问题,创建小根堆PriorityQueue<Map.Entry<String,Integer>> minHeap=new PriorityQueue<>(new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {if(o1.getValue().compareTo(o2.getValue())==0){return o2.getKey().compareTo(o1.getKey());}return o1.getValue().compareTo(o2.getValue());}});//遍历mapfor(Map.Entry<String,Integer> entry:map.entrySet()){if(minHeap.size()<k){minHeap.offer(entry);}else{Map.Entry<String,Integer> top=minHeap.peek();if(top.getValue().compareTo(entry.getValue())<0){minHeap.poll();minHeap.offer(entry);}if(top.getValue().compareTo(entry.getValue())==0){if(top.getKey().compareTo(entry.getKey())>0){minHeap.poll();minHeap.offer(entry);}}}}//此时的大根堆里面一定是前k个高频单词List<String> list=new ArrayList<>();for(int i=0;i<k;i++){Map.Entry<String,Integer> tmp=minHeap.poll();list.add(tmp.getKey());}//Collections专门用来处理集合Collections.reverse(list);return list;}public static void main(String[] args) {}
}

结语 

再见~

 

 

 

 

http://www.xdnf.cn/news/245683.html

相关文章:

  • 奥地利学派方法论的三个基础
  • Java 算法入门:从基础概念到实战示例
  • 数字智慧方案6166丨智慧医养结合大数据平台方案(50页PPT)(文末有下载方式)
  • SpringBoot开发——SpringBoot3.4.3整合SpringThymeleaf、SpringSecurity搭建简易的管理后台,完成授权登录
  • 【设计模式】GoF设计模式之备忘录模式(Memento Pattern)
  • 文件操作--文件包含漏洞
  • 【IP101】图像滤波技术详解:从均值滤波到高斯滤波的完整指南
  • 【QNX+Android虚拟化方案】137 - msm-5.4 Kernel U盘 插入中断、枚举、匹配完整流程详解
  • 深度学习框架:PyTorch使用教程 !!
  • 缓存:缓解读库压力的高效方案与应用实践
  • DeepSeek V3 架构创新:大规模MoE与辅助损失移除
  • 本文不定期更新,用于收录各种怪异的python脚本
  • 实现Sentinel与Nacos的规则双向同步
  • Java朴实无华按天计划从入门到实战(94天直达Java高阶)
  • [计算机科学#7]:CPU的三阶段,取指令、解码、执行
  • 时序建模演进之路:从 MLP、RNN 到 LSTM 与 GRU
  • 【Linux】Makefile
  • 小结:ipsec-ike
  • 例数据中关键指标对应的SQL查询模板
  • mysql数据库备份与恢复方法
  • Java学习手册:Spring 事务管理
  • 面试的各种类型
  • Linux日常使用与运维的AI工具全景调研:效率革命的终极指南
  • (A题|支路车流量推测问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合
  • 【Dify系列教程重置精品版】第五章:Dify配置Ollama
  • C++漫溯键值的长河:map set
  • ES6-Set-Map对象小记
  • 业务流程BPM能力框架体系及华为中兴流程变革案例P83(83页PPT)(文末有下载方式)
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(六)
  • 初识 Java