【leetcode】記錄與查找:哈希表的題型分析

前言

🌟🌟本期講解關于力扣的幾篇題解的詳細介紹~~~

🌈感興趣的小伙伴看一看小編主頁:GGBondlctrl-CSDN博客

🔥 你的點贊就是小編不斷更新的最大動力 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

🎆那么廢話不多說直接開整吧~~

?

目錄

📚?1.兩數之和

🚀1.1題目描述

🚀1.2思路分析

🚀1.3代碼編寫

📚?2.存在重復字符II

🚀2.1題目描述

🚀2.2思路分析

🚀2.3代碼編寫

📚?3.字母異位詞分組

🚀3.1題目描述

🚀3.2思路分析

🚀3.3代碼編寫

📚?4.總結

?

📚?1.兩數之和

前提:作為本篇文章的開頭,主要是講解思路,本題比較簡單,大家看看思路就可以了;

🚀1.1題目描述

給定一個整數數組?nums?和一個整數目標值?target,請你在該數組中找出?和為目標值?target? 的那?兩個?整數,并返回它們的數組下標。

你可以假設每種輸入只會對應一個答案,并且你不能使用兩次相同的元素。

你可以按任意順序返回答案。

大家可能都已經做過這個題了吧~~,因為這是夢的開始?

那么直接開始講解本題的思路過程吧~~~

🚀1.2思路分析

第一種:暴力

這里的思路有兩種,第一種就是暴力枚舉,就是兩層for循環,直接找到我們對應的下標位置;但是肯定還有更加優秀的解法;當然這里的時間復雜度就是O(N^2)的;

第二種:哈希表

這里我們可以使用哈希表進行優化,即當我們遍歷某一個值,要找和等于target的另一個值,那么那個值就是“target - num[ i ]”,沒有找到,就將遍歷的值存入到我們的哈希表中,找到了就直接返回兩個對應的下標;

如下所示:

🚀1.3代碼編寫

暴力我就不演示了,直接編寫我們的哈希表的算法吧~~~

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> hash = new HashMap<>();for(int i = 0;i < nums.length ;i++){int x = target - nums[i];if(hash.containsKey(x)){return new int[]{i,hash.get(x)};}hash.put(nums[i],i);}return new int[]{0,0};}
}

解釋:注意了,在哈希表中存儲的就是我們要使用的類型,第一個參數就是我們的數組中對應的值,然后就是這個值對應的一個下標;

如果不存在我們要找的值,就將遍歷的數以及下標放入到我們的hash表中;

📚?2.存在重復字符II

🚀2.1題目描述

給你一個整數數組?nums?和一個整數?k?,判斷數組中是否存在兩個?不同的索引?i?和?j?,足?nums[i] == nums[j]?且?abs(i - j) <= k?。如果存在,返回?true?;否則,返回?false?。

如下所示:

就是我們可以發現重復的字符,對應的下標是3 - 0 = 3 <= k;所以就返回true;

那么直接講解小編的一個思路吧

🚀2.2思路分析

這里和上面的兩數之和的思路其實一致,只不過就是我們查找的值不一樣了

遍歷數組,若遍歷到的數字,在哈希表中找不到對應的數,那么就存入hash表中,反之找到了那么就要獲取這兩個相等的值的下標之差,若下小于等于k值,就是直接返回true;反之就將之存入到我們的哈希表中~~~

?小細節:

即當存在兩個值相等后,但是下標之差不符合,那么我們可以存入后者值的下標去覆蓋,那么只是符合題意的~~~

🚀2.3代碼編寫

?具體的代碼如下所示:

class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {Map<Integer,Integer> hash = new HashMap<>();for(int i = 0;i < nums.length;i++){if(hash.containsKey(nums[i])){if((i - hash.get(nums[i])) <= k){return true;}}hash.put(nums[i],i);}return false;}
}

大致和第一題沒有什么差別;

📚?3.字母異位詞分組

🚀3.1題目描述

給你一個字符串數組,請你將?字母異位詞?組合在一起。可以按任意順序返回結果列表。

字母異位詞?是由重新排列源單詞的所有字母得到的一個新單詞。

如下所示:

大致就是對于異位詞進行分組;

🚀3.2思路分析

異位詞:就是同樣的組成元素,但是不同排列而成的;

大致的思路就是:

我們將遍歷的字符串,進行ascll碼值的排序操作;將排序后相等的字符串放在一起即可;

大體的思路如下所示:

即如果遍歷到的字符串,進行排序后不存在我們的hash表中,那么存入我們排序后的字符串作為key,然后創建一個新的列表,并將這里的值添加進去;反之存在,那么直接找到對應的Key,然后再添加進入我們的列表中;

🚀3.3代碼編寫

代碼如下所示:

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> hash = new HashMap<>();for(int i = 0;i < strs.length;i++){String s = changeString(strs[i]);if(!hash.containsKey(s)){hash.put(s,new ArrayList());}hash.get(s).add(strs[i]);}return new ArrayList(hash.values());}public String changeString(String s){char[] ch = s.toCharArray();Arrays.sort(ch);String str = Arrays.toString(ch);return str;}
}

直接可以通過Array.sort進行排序,然后返回我們排序過后的字符串~~~

📚?4.總結

其實除了上述使用java庫中的hash表,那么其實還有一種我們可以自己創建一個hash數組,主要適用于在數據范圍不大的題目中,小編這里就沒有演示,大家可以力扣上面刷刷~~~

本期主要講解了關于hash函數的力扣相關題型

兩數之和(1. 兩數之和 - 力扣(LeetCode))

存在重復字符II(219. 存在重復元素 II - 力扣(LeetCode))

字母異位詞分組(49. 字母異位詞分組 - 力扣(LeetCode))

🌅🌅🌅~~~~最后希望與諸君共勉,共同進步!!!


💪💪💪以上就是本期內容了, 感興趣的話,就關注小編吧。

? ? ?? 😊😊??期待你的關注~~~

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

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

相關文章

優選算法的妙思之流:分治——快排專題

專欄&#xff1a;算法的魔法世界 個人主頁&#xff1a;手握風云 目錄 一、快速排序 二、例題講解 2.1. 顏色分類 2.2. 排序數組 2.3. 數組中的第K個最大元素 2.4. 庫存管理 III 一、快速排序 分治&#xff0c;簡單理解為“分而治之”&#xff0c;將一個大問題劃分為若干個…

二叉樹的ACM板子(自用)

package 二叉樹的中序遍歷;import java.util.*;// 定義二叉樹節點 class TreeNode {int val; // 節點值TreeNode left; // 左子節點TreeNode right; // 右子節點// 構造函數TreeNode(int x) {val x;} }public class DMain {// 構建二叉樹&#xff08;層序遍歷方式&…

Linux常用命令詳解:從基礎到進階

目錄 一、引言 二、文件處理相關命令 &#xff08;一&#xff09;grep指令 &#xff08;二&#xff09;zip/unzip指令 ?編輯 &#xff08;三&#xff09;tar指令 &#xff08;四&#xff09;find指令 三、系統管理相關命令 &#xff08;一&#xff09;shutdown指…

Qt多線程從基礎到性能優化

一、為什么需要多線程開發 現代應用程序的性能需求 CPU多核架構的有效利用 復雜任務的解耦與響應式界面保持 二、Qt線程創建四大方式 1. 繼承QThread重寫run() class WorkerThread : public QThread {void run() override {// 耗時操作qDebug() << "Thread ID…

【java】在 Java 中,獲取一個類的`Class`對象有多種方式

在 Java 中&#xff0c;獲取一個類的Class對象有多種方式。Class對象代表了 Java 中的一個類或接口的運行時類信息&#xff0c;可以用于反射操作。以下是獲取Class對象的幾種常見方法&#xff1a; 1.使用.class屬性 每個類都有一個.class屬性&#xff0c;可以直接獲取該類的Cl…

什么是RPC通信

RPC&#xff08;Remote Procedure Call&#xff0c;遠程過程調用&#xff09;通信是一種允許程序像調用本地函數一樣調用遠程服務器上函數的通信技術。它簡化了分布式系統中的網絡交互&#xff0c;隱藏了底層網絡通信的復雜性&#xff0c;使開發者能夠專注于業務邏輯。 一、RPC…

還是主題混合程序設計

以下是針對您現有代碼的完整主題化改造方案&#xff0c;實現跨QML/Qt Widgets的陰影主題系統&#xff1a; 一、主題管理系統核心 // thememanager.h #pragma once #include <QObject> #include <QColor> #include <QMap> #include <QQmlEngine>class…

BT-Basic函數之首字母T

BT-Basic函數之首字母T 文章目錄 BT-Basic函數之首字母Ttabtesttest conttest monitortest on boardstest scanworkstest shortstesthead cleanuptesthead configurationtesthead istesthead power on/offtesthead statustestjet print level istestordertestplan generationth…

7-9 趣味游戲

題目解析 在某個學校的趣味游戲活動中&#xff0c;N 名同學站成一排&#xff0c;他們的年齡恰好是 1 到 N &#xff0c;需要注意的是他們并不是按照年齡的大小排列的&#xff0c;而是隨機排列的。 游戲的規則是請同學們快速計算出&#xff0c;如果在這 N 名同學的小組中&…

Hugging Face模型微調訓練(基于BERT的中文評價情感分析)

文章目錄 學習視頻地址項目地址數據集的下載模型微調的基本概念與流程加載數據集數據集格式數據集信息 制作Dataset數據集字段數據集信息 vocab字典操作詞匯表文本轉換 下游任務模型設計模型訓練與保存數據加載優化器訓練循環 最終效果評估與測試模型加載和測試 學習視頻地址 …

【藍橋杯】十五屆省賽B組c++

目錄 前言 握手問題 分析 排列組合寫法 枚舉 小球反彈 分析 代碼 好數 分析 代碼 R 格式 分析 代碼 寶石組合 分析 代碼 數字接龍 分析 代碼 拔河 分析 代碼 總結 前言 主播這兩天做了一套藍橋杯的省賽題目&#xff08;切實感受到了自己有多菜&#x…

必刷算法100題之計算右側小于當前元素的個數

題目鏈接 315. 計算右側小于當前元素的 個數 - 力扣&#xff08;LeetCode&#xff09; 題目解析 計算數組里面所有元素右側比它小的數的個數, 并且組成一個數組,進行返回 算法原理 歸并解法(分治) 當前元素的后面, 有多少個比我小(降序) 我們要找到第一比左邊小的元素, 這…

Hyperlane框架:下一代高性能Rust Web框架 [特殊字符]

Hyperlane框架&#xff1a;下一代高性能Rust Web框架 &#x1f680; 引言 &#x1f44b; 在當今快速發展的Web開發領域&#xff0c;性能和開發效率的平衡變得越來越重要。Hyperlane作為一個新興的Rust Web框架&#xff0c;完美地解決了這個問題。本文將帶您深入了解Hyperlane…

圖像處理:使用Numpy和OpenCV實現傅里葉和逆傅里葉變換

文章目錄 1、什么是傅里葉變換及其基礎理論 1.1 傅里葉變換 1.2 基礎理論 2. Numpy 實現傅里葉和逆傅里葉變換 2.1 Numpy 實現傅里葉變換 2.2 實現逆傅里葉變換 2.3 高通濾波示例 3. OpenCV 實現傅里葉變換和逆傅里葉變換及低通濾波示例 3.1 OpenCV 實現傅里葉變換 3.2 實現逆傅…

OpenEuler/CentOS一鍵部署OpenGauss數據庫教程(腳本+視頻)

&#x1f4cc;OpenEuler/CentOS一鍵安裝OpenGauss數據庫教程 為什么需要OpenGauss一鍵安裝腳本&#xff1f; 手動部署OpenGauss數據庫時&#xff0c;環境適配、依賴沖突等問題常讓開發者頭疼。尤其對新人而言&#xff0c;官方文檔的配置步驟可能耗時數小時甚至引發未知報錯。 …

如何解決 Hive 在創建 MySQL 表時出現亂碼???的問題

1.問題描述 我們啟動Hive建立一個學生students表格 使用desc students;查看表格結構時 發現有出現亂碼的情況 2.解決方案 打開Hive安裝機器上面的MySQL 切換到Hive數據庫 執行以下命令修改字段注釋字符集 mysql -u root -p123456;use hive;alter table COLUMNS_V2 modify col…

自定義組件觸發餓了么表單校驗

餓了么的表單控件&#xff0c;如果存在自定義組件更改了值&#xff0c;例如在el-from中存在原生input組件很有可能沒法觸發表單校驗&#xff0c;下拉框或者彈框組件仍然是報紅邊框。 這是因為餓了么的輸入框或者下拉框更改值的時候會自動觸發表單校驗&#xff0c;但是封裝過后的…

架構思維:查詢分離 - 表數據量大查詢緩慢的優化方案

文章目錄 Pre引言案例何謂查詢分離&#xff1f;何種場景下使用查詢分離&#xff1f;查詢分離實現思路1. 如何觸發查詢分離&#xff1f;方式一&#xff1a; 修改業務代碼&#xff1a;在寫入常規數據后&#xff0c;同步建立查詢數據。方式二&#xff1a;修改業務代碼&#xff1a;…

Linux開發工具——make/makefile

&#x1f4dd;前言&#xff1a; 這篇文章我們來講講Linux開發工具——make/makefile&#xff1a; &#x1f3ac;個人簡介&#xff1a;努力學習ing &#x1f4cb;個人專欄&#xff1a;Linux &#x1f380;CSDN主頁 愚潤求學 &#x1f304;其他專欄&#xff1a;C學習筆記&#xf…

python加載訓練好的模型并進行葉片實例分割預測

要基于“GMT: Guided Mask Transformer for Leaf Instance Segmentation”進行代碼復現&#xff0c;可按照以下步驟利用Python實現&#xff1a; 環境配置 克隆倉庫&#xff1a;在終端中使用git clone https://github.com/vios-s/gmt-leaf-ins-seg.git命令&#xff0c;將項目代…