Map和Set相關練習

目錄

1、只出現一次的數字

2、寶石與石頭

3、壞鍵盤打字

4、復制帶隨機指針的鏈表

5、大量數據去重

6、大量數據重復次數

7、前K個高頻單詞


1、只出現一次的數字

oj:136. 只出現一次的數字 - 力扣(LeetCode)

思路:
1. 使用 Set

2. 遍歷數組,如果Set中不包含當前元素,就add,包含就remove

3. 最后Set中剩的一個元素就是要找的元素

    public int singleNumber(int[] nums) {//HashSet<Integer> set = new HashSet<>();TreeSet<Integer> set = new TreeSet<>();for(int x : nums) {if(!set.contains(x)) {set.add(x);}else {set.remove(x);}}//此時集合中只有一個元素了for(int x : nums) {if(set.contains(x)) {return x;}}return -1;}

2、寶石與石頭

oj:771. 寶石與石頭 - 力扣(LeetCode)

思路:

1. 將寶石字符串轉化為一個字符數組,并把數組中每個字符都保存到Set集合中

2. 遍歷石頭字符串,如果當前位置的石頭在Set集合中存在,就把計數器++,最后返回計數器

    public int numJewelsInStones(String jewels, String stones) {HashSet<Character> set = new HashSet<>();for(char ch : jewels.toCharArray()) {set.add(ch);}int count = 0;for(char ch : stones.toCharArray()) {if(set.contains(ch)) {count++;}}return count;}

3、壞鍵盤打字

牛客:舊鍵盤 (20)__牛客網

思路:

1. 將第二行字符串轉化成大寫,然后遍歷這個字符串,把每個字符都放在set中

2.?將第一行字符串轉化成大寫,然后遍歷這個字符串,把每個字符都放在set2中,當前字符在set中沒有并且在set2中也沒有,就打印

    public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的區別while (in.hasNextLine()) { // 注意 while 處理多個 caseString str1 = in.nextLine();String str2 = in.nextLine();func(str1,str2);}}private static void func(String str1,String str2) {HashSet<Character> set = new HashSet<>();for(char ch : str2.toUpperCase().toCharArray()) {set.add(ch);}HashSet<Character> set2 = new HashSet<>();for(char ch : str1.toUpperCase().toCharArray()) {if(!set.contains(ch) && !set2.contains(ch)) {System.out.print(ch);set2.add(ch);}}}

4、復制帶隨機指針的鏈表

oj:138. 隨機鏈表的復制 - 力扣(LeetCode)

思路:

1. 遍歷鏈表,每遍歷到一個結點,就創建一個新結點,并把這兩個結點的地址以鍵值對的形式保存到Map中

2. 通過Map修改指向

????????map.get(cur).next = map.get(cur.next);

????????map.get(cur).random = map.get(cur.random);

3. 返回新鏈表的頭結點

    public Node copyRandomList(Node head) {Map<Node,Node> map = new HashMap<>();Node cur = head;//1. 第一次遍歷鏈表 存儲對應關系while(cur != null) {Node node = new Node(cur.val);map.put(cur,node);cur = cur.next;}//2. 第2次遍歷鏈表 開始修改每個節點的指向cur = head;while(cur != null) {map.get(cur).next = map.get(cur.next);map.get(cur).random = map.get(cur.random);cur = cur.next;}//3、返回head對應的地址return map.get(head);}

5、大量數據去重

有10W個數據如何去除重復的數據,重復的數據只保留一份

    public static void main(String[] args) {int[] array = {1,2,3,3,2};HashSet<Integer> set = new HashSet<>();for (int i = 0; i < array.length; i++) {set.add(array[i]);}System.out.println(set);}

6、大量數據重復次數

有10W個數據,統計每個數據出現的次數

    public static void main12(String[] args) {int[] array = {1,2,3,3,2};Map<Integer,Integer> map = new HashMap<>();for(Integer x : array) {if(map.get(x) == null) {//第一次存放map.put(x,1);}else {//其他情況在原來的基礎上加 1int val = map.get(x);map.put(x,val+1);}}for(Map.Entry<Integer,Integer> entry : map.entrySet()) {System.out.println("key: "+entry.getKey()+" val: "+entry.getValue());}}

7、前K個高頻單詞

oj:692. 前K個高頻單詞 - 力扣(LeetCode)

public List<String> topKFrequent(String[] words, int k) {//1、先統計單詞出現的次數->存儲到了map當中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);}}//2、遍歷好統計好的Map,把每組數據存儲到小根堆當中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());}});for(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);}else {//def->2                     abc-> 2if(top.getValue().compareTo(entry.getValue()) == 0) {if(top.getKey().compareTo(entry.getKey()) > 0) {minHeap.poll();minHeap.offer(entry);}}}}}List<String> ret = new ArrayList<>();//放到了小根堆 2   3    4for (int i = 0; i < k; i++) {Map.Entry<String,Integer> top = minHeap.poll();ret.add(top.getKey());}// 2  3   4 ->  4 3 2Collections.reverse(ret);return ret;}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79578.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

day45——非遞減數列(LeetCode-665)

題目描述 給你一個長度為 n 的整數數組 nums &#xff0c;請你判斷在 最多 改變 1 個元素的情況下&#xff0c;該數組能否變成一個非遞減數列。 我們是這樣定義一個非遞減數列的&#xff1a; 對于數組中任意的 i (0 < i < n-2)&#xff0c;總滿足 nums[i] < nums[i …

OOM 未觸發 JVM 崩潰的可能原因

1. OOM 未觸發 JVM 崩潰的可能原因? (1) 未配置 JVM 參數強制崩潰? 關鍵參數缺失?&#xff1a; 若未添加 -XX:CrashOnOutOfMemoryError&#xff0c;JVM 在 OOM 時可能僅拋出異常并正常退出&#xff0c;而非崩潰&#xff0c;因此不會生成 hs_err_pid.log。 # 正確配置示例&…

Axios 介紹及使用指南

本文將基于 Axios 原理&#xff0c;安裝及封裝方面展開描述&#xff0c;話不多說&#xff0c;現在發車&#xff01; 一、原理 Axios 中文文檔&#xff1a;起步 | Axios中文文檔 | Axios中文網 賽前科普&#xff1a; 下文將涉及到三個關鍵詞&#xff1a;Axios&#xff0c;Ajax…

C#插件與可擴展性

外接程序為主機應用程序提供了擴展功能或服務。.net framework提供了一個編程模型,開發人員可以使用該模型來開發加載項并在其主機應用程序中激活它們。該模型通過在主機和外接程序之間構建通信管道來實現此目的。該模型是使用: System.AddIn, System.AddIn.Hosting, System.…

Melos 發布pub.dev

確保登錄 置登錄狀態 按照提示操作&#xff0c;先運行&#xff1a; bash dart pub logout 這會清除當前的&#xff08;損壞的&#xff09;登錄信息。 然后再重新登錄&#xff1a; bash dart pub login 這一次它應該會在瀏覽器中打開 Google 登錄頁面&#xff0c;完成登…

4.黑馬學習筆記-SpringMVC(P43-P47)

1.SpringMVC簡介 SpringMVC技術&#xff08;更少的代碼&#xff0c;簡便&#xff09;與servlet技術功能相同&#xff0c;屬于web層開發技術。 SpringMVC是一種基于java實現MVC模型的輕量級web框架。 輕量級指的是&#xff08;內存占用比較低&#xff0c;運行效率高&#xff09;…

【特殊場景應對1】視覺設計:信息密度與美學的博弈——讓簡歷在HR視網膜上蹦迪的科學指南

寫在最前 作為一個中古程序猿,我有很多自己想做的事情,比如埋頭苦干手搓一個低代碼數據庫設計平臺(目前只針對寫java的朋友),比如很喜歡幫身邊的朋友看看簡歷,講講面試技巧,畢竟工作這么多年,也做到過高管,有很多面人經歷,意見還算有用,大家基本都能拿到想要的offe…

CentOS 7 linux系統從無到有部署項目

環境部署操作手冊 一、Maven安裝與配置 1. 下載與解壓 下載地址&#xff1a;https://maven.apache.org/download.cgi?spm5238cd80.38b417da.0.0.d54c32cbnOpQh2&filedownload.cgi上傳并解壓解壓命令&#xff1a; tar -zxvf apache-maven-3.9.9-bin.tar.gz -C /usr/loc…

Odoo:免費開源的軋制品行業管理軟件

Odoo免費開源的軋制品行業管理軟件能夠幫助建材、電線電纜、金屬、造紙包裝以及紡織品行業提高韌性和盈利能力&#xff0c;構筑美好未來。 文 &#xff5c; 開源智造&#xff08;OSCG&#xff09;Odoo金牌服務 提高供應鏈韌性&#xff0c;賦能可持續發展 如今&#xff0c;金屬…

51單片機實驗二:數碼管靜態顯示

目錄 一、實驗環境與實驗器材 二、實驗內容及實驗步驟 1.單個數碼管顯示 2.六個數碼管依次從0~F變換顯示 3.proteus仿真 一、實驗環境與實驗器材 環境&#xff1a;Keli&#xff0c;STC-ISP燒寫軟件,Proteus. 器材&#xff1a;TX-1C單片機&#xff08;STC89C52RC…

學術AI工具推薦

一、基礎信息對比 維度知網研學AI&#xff08;研學智得AI&#xff09;秘塔AIWOS AI開發公司同方知網&#xff08;CNKI&#xff09;上海秘塔網絡科技Clarivate Analytics是否接入DeepSeek? 深度集成&#xff08;全功能接入DeepSeek-R1推理服務&#xff09;? 通過API接入DeepS…

冰川流域提取分析——ArcGIS pro

一、河網提取和流域提取視頻詳細GIS小熊 || 6分鐘學會水文分析—河網提取&#xff08;以宜賓市為例&#xff09;_嗶哩嗶哩_bilibili 首先你要生成研究區域DEM&#xff0c;然后依次是填洼→流向→流量→柵格計算器→河網分級→柵格河網矢量化&#xff08;得到河網.shp&#xff…

【物聯網-RS-485】

物聯網-RS-485 ■ RS-485 連接方式■ RS-485 半雙工通訊■ RS-485 的特點 ■ RS-485 連接方式 ■ RS-485 半雙工通訊 一線定義為A 一線定義為B RS-485傳輸方式&#xff1a;半雙工通信、&#xff08;邏輯1&#xff1a;2V ~ 6V 邏輯0&#xff1a;-6V ~ -2V&#xff09;這里的電平…

解析檢驗平板:設備還是非設備?深入了解其功能與應用(北重鑄鐵平臺廠家)

檢驗平板通常被歸類為設備&#xff0c;因為它們具有特定的功能&#xff0c;并且被用于測試和評估其他設備或產品的性能和質量。檢驗平板通常具有平坦的表面&#xff0c;用于放置要進行測試或檢驗的物品。它們可以用于測量尺寸、形狀、平整度、表面光潔度等參數。 檢驗平板的應…

6.數據手冊解讀—運算放大器(二)

目錄 6、細節描述 6.1預覽 6.2功能框圖 6.3 特征描述 6.3.1輸入保護 6.3.1 EMI抑制 6.3.3 溫度保護 6.3.4 容性負載和穩定性 6.3.5 共模電壓范圍 6.3.6反相保護 6.3.7 電氣過載 6.3.8 過載恢復 6.3.9 典型規格與分布 6.3.9 散熱焊盤的封裝 6.3.11 Shutdown 6.4…

2025年03月中國電子學會青少年軟件編程(Python)等級考試試卷(六級)真題

青少年軟件編程&#xff08;Python&#xff09;等級考試試卷&#xff08;六級&#xff09; 分數&#xff1a;100 題數&#xff1a;38 答案解析&#xff1a;https://blog.csdn.net/qq_33897084/article/details/147341458 一、單選題(共25題&#xff0c;共50分) 1. 在tkinter的…

centos與ubuntu系統版本介紹

CentOS與Ubuntu系統鏡像版本介紹 前言CentOS官網鏡像歷史版本阿里云鏡像總結 Ubuntu官網系統總結 最后 前言 在我準備給虛擬機&#xff08;我使用的是vritualbox&#xff09;安裝一個Linux系統&#xff0c;不知道該選擇centos還是Ubuntu。并且在下載鏡像的過程中對系統的版本、…

Go 語言中的 package main、 func main() 和main.go的使用規范

本文旨在解釋 Go 語言中 package main 、 func main() 和main.go的關系及其使用規則,解決如下典型問題: 是否可以在一個項目中定義多個 func main()?是否可以在非 package main 中寫 func main()?多個文件中都寫 func main() 會沖突嗎?main.go是必須的命名方式嗎?正確的結…

MySQL啟動Failed to start LSB: start and stop MySQL

錯誤呈現 數據庫初始化 刪除 mysql/data中的文件 在對數據庫重新進行初始化之前&#xff0c;需要事先刪除 /usr/local/mysql/data目錄下已經生成的文件。 查看 ll /usr/local/mysql/data/#刪除 rm -rf /usr/local/mysql/data/* 刪除 使用以下命令對數據庫初始化 /usr/local/m…

服務器架構:SMP、NUMA、MPP及Docker優化指南

文章目錄 引言 一、服務器架構基礎1. SMP&#xff08;對稱多處理&#xff0c;Symmetric Multiprocessing&#xff09;2. NUMA&#xff08;非統一內存訪問&#xff0c;Non-Uniform Memory Access&#xff09;3. MPP&#xff08;大規模并行處理&#xff0c;Massively Parallel Pr…