暑期算法訓練.12

目錄

52. 力扣1 兩數之和

52.1 題目解析:

52.2 算法思路:

52.3 代碼演示:

?編輯

52.4 總結反思:

53 面試題:判定是否互為字符重排

53.1 題目解析:

53.2 算法思路:

53.3 代碼演示:

?編輯

53.4 總結反思

54. 力扣217 存在重復元素I

54.1 題目解析:

54.2 算法思路:

54.3 代碼演示:

?編輯

54.4總結反思:

55. 力扣219 存在重復的元素II

55.1 題目解析:

?編輯?

55.2 算法思路:

55.3 代碼演示:

?編輯

55.4 總結反思

56. 力扣49 字母異位詞分組

56.1 題目解析:

?編輯?

56.2 算法思路:

56.3 代碼演示:

?編輯

56.4 總結反思:

?

?

?

?

?


今天的算法題是我從暑假寫博客以來最簡單的一次。廢話少說,開啟今天的算法題

在此之前,咱們要先講一下哈希表:

1.哈希表是什么?(哈希表使用方式比較單一),它是存儲數據的容器。

2.那么哈希表有啥用呢?快速查找某個元素,基本接近O(1)級別。

3.什么時候用哈希表?當頻繁的查找某一個數的時候用哈希表,或者使用二分查找,但是二分查找局限性比較大。你用哈希表是因為哈希表比較快,但是呢,能用二分查找還是用二分查找,因為哈希表是典型的用空間換時間。

4.怎么用哈希表?1.容器(哈希表)2.使用數組模擬簡易的哈希表。一般適用于:

【1】字符串中的“字符”,(基本創建一個大小為200的數組空間即可),<index,n[index]>

? 【2】數據范圍比較小的時候,比如int,1~10^3或4或5,每一個下標對應一個數,但是當出現負數的話,就不建議使用了。

OK,那么關于哈希表的前置知識已經講完了,那么接下來,就正式的進入咱們今天的講題階段

52. 力扣1 兩數之和

52.1 題目解析:

本題很簡單的題目吧。

52.2 算法思路:

那么這個題目,咱們可以使用暴力枚舉來做,不過這個暴力枚舉,并不是非常干脆的暴力枚舉,還是需要一點智慧的。那么下面我就舉個例子,大家看一看。

?

就是固定住一個數字,然后,從這個固定的數字后面去尋找對應的數字即可。那么此時就有兩種尋找方式,一個是從前往后,一個是從后往前

優化:

那么咱們對于這種暴力解法,咱們該如何優化呢?

?

優化就是根據前面的暴力解法來進行的優化,由上面的解析可以看出優化的結果。

52.3 代碼演示:

vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> hash;//<nums[i],i>for (int i = 0; i < nums.size(); i++){int x = target - nums[i];//這個是在哈希表中找到這個數if (hash.count(x)) return { hash[x],i };//這個hash[x],返回的是x的下標。count,如果哈希表中有這個key,就返回1,否則,返回0hash[nums[i]] = i;//如果沒有這個數字,那么就存儲這個數字,并且存下這個數字的下標,因為上面那行代碼需要用到下標}return { -1,-1 };
}
int main()
{vector<int> nums = { 2,7,11,15 };int target = 9;vector<int> outcome = twoSum(nums, target);for (auto& e : outcome){cout << e << "";}cout << endl;return 0;
}

52.4 總結反思:

本題基本就用到咱們之前所講的那些東西,這里創建哈希表使用unordered_map,是因為這里有key以及val,不只是key

53 面試題:判定是否互為字符重排

53.1 題目解析:

題目也會相當的簡單,而且,咱們上面也說了,只要是關于字符串存儲的,都可以使用到哈希表

53.2 算法思路:

那么本題就是使用哈希表,使用一個,這里有一個細節,就是遍歷s1的字符之后,再遍歷s2。如果在s2找到與s1相同的字符,就減一,如果最后減到負數,則返回false。并且若兩個字符串長度不相等則直接返回false即可。

53.3 代碼演示:

bool CheckPermutation(string s1, string s2) {if (s1.size() != s2.size()) return false;int hash[26] = { 0 };for (auto& e : s1){hash[e - 'a']++;}for (auto& e : s2){hash[e - 'a']--;if (hash[e - 'a'] < 0) return false;}return true;
}
int main()
{string s1("abc");string s2("bca");cout << CheckPermutation(s1, s2) << endl;return 0;
}

53.4 總結反思

基本也是用到了咱們開篇所講的那些知識

54. 力扣217 存在重復元素I

54.1 題目解析:

這題目更不需要多說

54.2 算法思路:

那么咱們這一題主要就是使用哈希表去完成:

這一道題與那個兩數之和的題目策略很像,咱們可以使用那個策略去做,也是使用哈希表,只不過,這一次,只需要有一個key值即可,不需要存val,所以使用unordered_set即可。

54.3 代碼演示:

bool containsDuplicate(vector<int>& nums)
{unordered_set<int> hash;for (auto e : nums){if (hash.count(e)) return true;hash.insert(e);}return false;
}
int main()
{vector<int> nums = { 1,2,3,1 };cout << containsDuplicate(nums) << endl;return false;
}

54.4總結反思:

基本的重要的知識,學會運用,做題輕輕松松

55. 力扣219 存在重復的元素II

55.1 題目解析:

?

這個題目與前面的那一個題目很像,只是多了一個條件而已

55.2 算法思路:

由于這個得使用到下標,所以咱們還是使用unordered_map進行創建哈希表

55.3 代碼演示:

bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> hash;for (int i = 0; i < nums.size(); i++){if (hash.count(nums[i])){if ((i - hash[nums[i]]) <= k) return true;}hash[nums[i]] = i;}return false;
}
int main()
{vector<int> nums = { 1,2,3,1 };int k=3;cout << containsNearbyDuplicate(nums, k) << endl;return 0;
}

55.4 總結反思

那么大體的思路基本就是這樣,大家還是得利用好前面的知識才可以

56. 力扣49 字母異位詞分組

56.1 題目解析:

?

這個題目很簡單,就是具有相同的字母的字符串就可以合成一組異位詞。

56.2 算法思路:

這個還是得使用哈希表,1.判斷兩個字符是否為字母異位詞,排序

2.然后就是如何分組?<string,string[]>,第二個存的是字符數組。例如,"aet","tea"若字符串中有這個字母,那么加入到字符串數組即可

即val就是咱們所要的結果

56.3 代碼演示:

vector<vector<string>> groupAnagrams(vector<string>& strs)
{unordered_map<string, vector<string>> hash;// 1. 把所有的字?異位詞分組for (auto& s : strs){string tmp = s;sort(tmp.begin(), tmp.end());hash[tmp].push_back(s);}// 2. 結果提取出來vector<vector<string>> ret;for (auto& [x, y] : hash){ret.push_back(y);}return ret;
}
int main()
{vector<string> str = { "eat", "tea", "tan", "ate", "nat", "bat" };vector<vector<string>> outcome = groupAnagrams(str);for (auto& e : outcome){for (auto& x : e){cout << x << "";}cout << endl;}return 0;
}

56.4 總結反思:

基本今天的題目就是這些,算是比較簡單的。

本篇完....................?

?

?

?

?

?

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

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

相關文章

MySQL時間處理完全指南:從存儲到查詢優化

時間是數據庫中最活躍的數據維度之一&#xff0c;正確處理時間數據關系到系統穩定性、數據分析準確性和業務邏輯正確性。本文將深入剖析MySQL時間處理的完整知識體系。一、MySQL時間數據類型詳解1. 核心時間類型對比類型存儲空間范圍特性時區影響DATE3字節1000-01-01~9999-12-3…

Text2SQL 智能問答系統開發-預定義模板(二)

背景 在構建一個支持多輪對話的 Text2SQL 系統過程中&#xff0c;我完成了以下關鍵功能&#xff1a; 已完成 基礎 Text2SQL 功能實現 實現用戶輸入自然語言問題后&#xff0c;系統能夠自動生成 SQL 并執行返回結果。用戶交互優化 支持用戶通過補充信息對查詢進行調整&#xff0…

JavaScript 異步編程:Promise 與 async/await 詳解

一、Promise 1. 什么是 Promise&#xff1f; Promise 是 JavaScript 中用于處理異步操作的對象&#xff0c;它代表一個異步操作的最終完成&#xff08;或失敗&#xff09;及其結果值。 2. Promise 的三種狀態 ??Pending&#xff08;待定&#xff09;??&#xff1a;初始狀態…

OS架構整理

OS架構整理引導啟動部分bios bootloader區別啟動流程&#xff08;x86 BIOS 啟動&#xff09;&#xff1a;biosboot_loader3.切換進保護模式實模式的限制如何切換進保護模式加載kernel到內存地址1M加載內核映像文件elf一些基礎知識鏈接腳本與代碼數據段創建GDT表段頁式內存管理顯…

【WRF-Chem第二期】WRF-Chem有關 namelist 詳解

目錄namelist 選項&#xff1a;chem_opt 的選擇其他化學相關的 namelist 選項氣溶膠光學屬性與輸出邊界與初始條件配置&#xff08;氣體&#xff09;參考本博客詳細介紹 WRF-Chem有關 namelist 選項。 namelist 選項&#xff1a;chem_opt 的選擇 chem_opt 是什么&#xff1f;…

STM32-USART串口實現接收數據三種方法(1.根據\r\n標志符、2.空閑幀中斷、3.根據定時器輔助接收)

本章概述思維導圖&#xff1a;USART串口初始化配置串口初始化配置在&#xff08;STM32-USART串口初始化章節有詳細教程配置&#xff09;&#xff0c;本章不做講解直接代碼示例&#xff0c;本章重點在于串口實現接收數據三種方法&#xff1b;配置USART1串口接收初始化函數步驟&a…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 微博評論數據可視化分析-點贊區間折線圖實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解微博評論數據可視化分析-點贊區間折線圖實現…

Unity_SRP Batcher

SRP Batcher 全面解析&#xff1a;原理、啟用、優化與調試一、什么是 SRP Batcher&#xff1f;SRP Batcher 是 Unity Scriptable Render Pipeline&#xff08;URP、HDRP 或自定義 SRP&#xff09; 專屬的 CPU 渲染性能優化技術&#xff0c;核心目標是 減少材質切換時的 CPU 開銷…

詳解Vite 配置中的代理功能

在前端開發過程中&#xff0c;你可能經常會遇到一個頭疼的問題&#xff1a;當你在本地啟動的前端項目中調用后端接口時&#xff0c;瀏覽器控制臺會報出類似 “Access to fetch at ‘http://xxx’ from origin ‘http://localhost:3000’ has been blocked by CORS policy” 的錯…

理解梯度在神經網絡中的應用

梯度&#xff08;Gradient&#xff09;是微積分中的一個重要概念&#xff0c;廣泛應用于機器學習和深度學習中&#xff0c;尤其是在神經網絡的訓練過程中。下面將從梯度的基本概念、其在神經網絡中的應用兩個方面進行詳細介紹。一、梯度的基本概念 1.1 什么是梯度&#xff1f; …

WPF,按鈕透明背景實現MouseEnter

在幫手程序&#xff08;assister.exe&#xff09;中&#xff0c;可以點擊錄制按鈕&#xff0c;實現錄制用戶操作直接生成操作列表。而在彈出錄制按鈕的懸浮窗中&#xff0c;需要能夠拖動錄制按鈕放置在任意的位置&#xff0c;以免阻擋正常的窗口。具體功能是&#xff0c;當鼠標…

【抄襲】思科交換機DAI(動態ARP監控)配置測試

一.概述 1.DAI作用 ①.使用DAI&#xff0c;管理員可以指定交換機的端口為信任和非信任端口&#xff1a; 信任端口可以轉發任何ARP信息 非信任端口的ARP消息要進行ARP檢測驗證 ②.交換機執行如下的ARP驗證&#xff1a; 靜態ARP監控&#xff1a;為一個靜態的IP地址配置一個靜態AR…

在嵌入式系統或 STM32 平臺中常見的外設芯片和接口

在嵌入式系統或 STM32 平臺中常見的 外設芯片 或 模塊名稱&#xff0c;包括&#xff1a; &#x1f4fa; 顯示驅動&#xff08;如 ST7735、OTM8009A、NT35510&#xff09;&#x1f4f7; 攝像頭模組&#xff08;如 OV5640、OV9655、S5K5CAG&#xff09;&#x1f4be; Flash 存儲器…

AI 類型的 IDE

指集成了 AI 輔助編程能力的集成開發環境 一、代碼輔助生成 ? 自動補全&#xff08;更智能&#xff09; 比傳統 IDE 更智能&#xff0c;理解上下文&#xff0c;生成整個函數/模塊 示例&#xff1a;根據函數名 calculateTax 自動生成稅務計算邏輯 ? 函數 / 類自動生成 給…

JP3-3-MyClub后臺后端(一)

Java道經 - 項目 - MyClub - 后臺后端&#xff08;一&#xff09; 傳送門&#xff1a;JP3-1-MyClub項目簡介 傳送門&#xff1a;JP3-2-MyClub公共服務 傳送門&#xff1a;JP3-3-MyClub后臺后端&#xff08;一&#xff09; 傳送門&#xff1a;JP3-3-MyClub后臺后端&#xff08;…

架構實戰——互聯網架構模板(“存儲層”技術)

目錄 一、SQL 二、NoSQL 三、小文件存儲 四、大文件存儲 本文來源:極客時間vip課程筆記 一、SQL SQL 即我們通常所說的關系數據。前幾年 NoSQL 火了一陣子,很多人都理解為 NoSQL 是完全拋棄關系數據,全部采用非關系型數據。但經過幾年的試驗后,大家發現關系數據不可能完全被…

CentOS7.9在線部署Dify

一、CentOS7.9安裝dify 二、檢查是否安裝dcoker docker --version2.1下載后將安裝包上傳至服務器對應文件夾下,我選在放在了 /root文件夾下 cd /root2.2 上傳至服務器 cd /root #對應目錄下tar -xvf docker-26.1.4.tgz # 解壓安裝包:chmod 755 -R docker # 賦予可執…

深入淺出C語言指針:從數組到函數指針的進階之路(中)

指針是C語言的靈魂&#xff0c;也是初學者最頭疼的知識點。它像一把鋒利的刀&#xff0c;用得好能大幅提升代碼效率&#xff0c;用不好則會讓程序漏洞百出。今天這篇文章&#xff0c;我們從數組與指針的基礎關系講起&#xff0c;一步步揭開指針進階類型的神秘面紗&#xff0c;最…

java web Cookie處理

java web 設置cookie更改啟動端口// Directory tree (5 levels) ├── src\ │ ├── a.txt │ └── com\ │ └── zhang\ │ └── ServletContext\ │ ├── cookie\ │ └── servletContext.java └── web\├─…

機器學習—線性回歸

一線性回歸線性回歸是利用數理統計中回歸分析&#xff0c;來確定兩種或兩種以上變量間相互依賴的定量關系的一種統計分析方法。相關關系&#xff1a;包含因果關系和平行關系因果關系&#xff1a;回歸分析【原因引起結果&#xff0c;需要明確自變量和因變量】平行關系&#xff1…