LeetCode Hot100 【1.兩數之和、2.兩數相加、3.無重復字符的最長子串】

1. 兩數之和

自己做?

分析

解法1:暴力解

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int num1 = 0;       //下標int num2 = 0;vector<int> s;      //保存結果for(vector<int>::iterator it1 = nums.begin(); it1 != nums.end()-1; it1++){num2 = num1+1;for(vector<int>::iterator it2 = it1+1; it2 != nums.end(); it2++){if(*it1+*it2 == target){s.push_back(num1);s.push_back(num2);return s;}num2++;}num1++;}return {0,0};  }
};

?錯誤想法

將大于target的部分舍棄縮小數組【沒有考慮到有負數的情況】

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> new_nums = nums;for(vector<int>::iterator it = new_nums.begin(); it != new_nums.end(); ) {   //刪除比target大的元素if(*it > target){it = new_nums.erase(it);                //刪除,erase會返回下一個迭代器位置}elseit++;}vector<int> s1;              //保存結果【兩個數】for(vector<int>::iterator it1 = new_nums.begin(); it1 != new_nums.end()-1; it1++){for(vector<int>::iterator it2 = it1+1; it2 != new_nums.end(); it2++){if(*it1+*it2 == target){s1.push_back(*it1);s1.push_back(*it2);}}}vector<int> s2;              //保存結果【尋找下標】int num = 0;for(vector<int>::iterator it = nums.begin(); it != nums.end(); it++,num++){if(*it == s1[0] || *it == s1[1])s2.push_back(num);}return s2;  }
};

看題解【想不到】

分析

自己寫?

【注,最好直接用臨時變量儲存find得到的迭代器,不然反復調用find也很浪費時間】

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> exist_num;for(int i = 0; i < nums.size(); i++){       //映射到哈希表中<key,index>exist_num[nums[i]] = i;}for(int i = 0; i < nums.size(); i++){       //查找target-nums[i]是否存在map<int,int>::iterator index = exist_num.find(target-nums[i]);if(index != exist_num.end() && i != index->second)   //存在并且不是同一元素(下標不一致)return {index->second,i};}return {};}
};

2. 兩數相加

自己做

分析

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode *p1 = l1,*p2 = l2; //遍歷結點ListNode *p3 = new ListNode((p1->val + p2->val) % 10);  //個位相加            int add =(p1->val + p2->val) / 10;                    //進位p1 = p1->next;p2 = p2->next;ListNode *pr = p3;                                  //尾插用的指針while(p1 != nullptr || p2 != nullptr){ListNode *p = nullptr;if(p1 != nullptr && p2 != nullptr){                //二者都不為空的情況p = new ListNode((p1->val + p2->val + add) % 10);  //創建新節點保存結果:保存余位  add = (p1->val + p2->val + add) / 10;                //保存進位p1 = p1->next;p2 = p2->next;}else if(p1 != nullptr){                            //p1不為空、p2為空 p = new ListNode((p1->val + add) % 10); //創建新節點保存結果:保存余位  add = (p1->val + add) / 10;                    //保存進位p1 = p1->next;}else if(p2 != nullptr){                                               //p2不為空、p1為空 p = new ListNode((p2->val + add) % 10); //創建新節點保存結果:保存余位  add = (p2->val + add) / 10;                     //保存進位p2 = p2->next;}pr->next = p;                                       //尾插pr = pr->next;}if(add != 0){                                //p1為空、p2為空外還有進位ListNode *p = new ListNode(add);pr->next = p;                                       //尾插pr = pr->next;}return p3;}
};

3. 無重復字符的最長子串

自己做

分析

遺漏點:string也是容器,也可以使用size、begin、end這些(之前的筆記沒補上)

解法1:暴力解

class Solution {
public:int lengthOfLongestSubstring(string s) {int max = 0;                             //記錄最大值string c;                                //子串for (int i = 0; i < s.size(); i++) {c = s[i];                           //子串起始位置從i開始bool exist_double = false;          //判斷是否重復     for (int j = i + 1; j < s.size() && exist_double == false; j++) {      //子串擴展for (int z = 0; z < c.size(); z++) {if (s[i + c.size()] == c[z])       //子串的下一個字符s[i+c.size()]與子串存在重復exist_double = true;        //存在重復,調整起始位置}//不存在重復if (!exist_double)c += (s[i + c.size()]);           //拼接子串}//判斷該輪取得的子串大小if (c.size() > max)max = c.size();}return max;                        //返回子串大小}
};

解法2:滑動窗口

這里我自己寫的還不如暴力解

class Solution {
public:int lengthOfLongestSubstring(string s) {int max = 0;                             //記錄最大值string c;                                //子串map<char, int> m;                         //哈希記錄子串<word,index>,其中index為字符串s的下標int index = 0;                           //子串c的起始下標while (index + c.size() < s.size()) {c = s[index];                           //子串起始位置從index開始 m[s[index]]=index;                      //插入哈希表for (int j = index + 1; j < s.size(); j++) {      //子串擴展map<char, int>::iterator it = m.find(s[j]);              //哈希查找if (it != m.end()) {   //子串的下一個字符s[i+c.size()]與子串存在重復【在哈希表中找到元素】index = it->second+1;         //更改索引,跳出重復值m.clear();        //清空哈希表break;           //本次查找失敗,直接進入下一輪【跳出for循環】}else {                //不存在重復c += s[j];           //拼接子串m[s[j]] = index;       //插入哈希表}}//判斷該輪取得的子串大小if (c.size() > max)max = c.size();}return max;                        //返回子串大小}
};

效率低原因:

嵌套循環結構頻繁的哈希表清空操作

看題解【敲不出】

知識點unordered_set:

仿寫官方思路?

class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_set<char> c;int rear = -1;int max = 0;for(int front = 0; front < s.size(); front++){if(front != 0){             //左指針移動c.erase(s[front - 1]);          //刪除移出哈希表的數據}while(rear + 1 < s.size() && !c.count(s[rear+1])){//右指針移動c.insert(s[rear+1]);        //插入哈希表rear++;}if(rear - front + 1 > max)max = rear - front + 1;}return max;}
};

優化自己的實現

class Solution {
public:int lengthOfLongestSubstring(string s) {int max = 0;unordered_map<char, int> m;int front = 0, rear = 0;        //首位指針cout << s.size() << endl;//往哈希表中設置第一個元素if (s.size() != 0) {           //預防空字符串m[s[rear]] = rear;max++;                     //已經添加一個字符進去了,即最大值最小也是1while (rear < s.size() - 1) {unordered_map<char, int>::iterator it = m.find(s[rear + 1]); //查看下一個元素是否已經在哈希表中if (it != m.end()) {          //在哈希表中找到元素【有重復】int old = front;              //記錄舊位置front = it->second + 1;      //偏移起始位置//移除窗口以外的值【front偏移了,前面的值都要刪除】for (int i = old; i < front; i++) {m.erase(s[i]);}}//無重復,或重復問題被front偏移解決m[s[rear + 1]] = rear + 1;  //修改哈希表【重新修改值】rear++;if (rear - front + 1 > max)max = rear - front + 1;}}return max;}
};

【注:這過程中發現了之前都沒有注意到的——size()返回的是無符號整數,而int是有符合整數,所以當我設置while循環的時候,往往出現size()返回的是0,結果設置的size()-1就變的極大,同理,設置rear從-1開始,結果rear轉為無符號整數后就廢了】

今天結束總結

之前做的博客筆記幫大忙了,剛學完的很多都有些忘了,還好之前做好了筆記可以來回翻

第十四章 STL(string容器、vector容器、deque容器)-CSDN博客

第十五章 STL(stack、queue、list、set、map容器使用)-CSDN博客

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

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

相關文章

AI一鍵“瘦身”,拯救巨卡無比的圖

有沒有碰到過那種巨卡無比的AI&#xff08;Illustrator&#xff09;文件&#xff1f;從素材網站下的&#xff0c;或者自己“圖像描摹”出來的&#xff0c;上面密密麻麻全是錨點&#xff0c;動一下卡半天&#xff01;我是在海外工作了10年的職業設計師&#xff5e;這些年最大的心…

MySQL基礎教程:SELECT語句詳解

MySQL基礎教程&#xff1a;SELECT語句詳解一、SQL概述1.1 SQL背景知識1.2 SQL語言排行榜1.3 SQL分類二、SQL語言的規則與規范2.1 基本規則2.2 大小寫規范2.3 注釋2.4 命名規則2.5 數據導入三、基本的SELECT語句3.0 最簡單的SELECT3.1 SELECT...FROM3.2 列的別名3.3 去除重復行3…

云原生環境下的安全控制框架設計

在這個容器滿天飛、微服務遍地跑的時代&#xff0c;安全問題就像打地鼠游戲一樣&#xff0c;剛按下一個又冒出三個。今天我們來聊聊如何在云原生環境中構建一套靠譜的安全控制框架。 &#x1f4d6; 文章目錄 引言&#xff1a;云原生時代的安全新挑戰云原生安全面臨的核心挑戰安…

Python關于numpy的基礎知識

一.首先先安裝numpy windowsr 輸入cmd 然后像我這樣輸入進去&#xff0c;加一句后面的https&#xff1a;.....可以放其他他的鏡像地址比如 清華大學鏡像源&#xff1a;Simple Index阿里云鏡像源&#xff1a;Simple Index中國科學技術大學鏡像源&#xff1a;Verifying - USTC …

生成式人工智能實戰 | 自回歸模型詳解與實現

生成式人工智能實戰 | 自回歸模型詳解與實現 0. 前言 1. 文本生成模型分析 2. 數據處理 2.1 數據預處理 2.2 創建訓練數據批次 3. 模型構建與訓練 3.1 構建 LSTM 模型 3.2 訓練 LSTM 模型 4. 生成文本 4.1 通過預測下一個 token 生成文本 4.2 控制文本生成的創意性 0. 前言 本…

路由器SDH POS接口

SDH POS 可看作“用 SDH 光纖專線給路由器當超級寬帶網線”。 1?? 拆名字 SDH?同步數字體系&#xff08;Synchronous Digital Hierarchy&#xff09;&#xff0c;運營商的骨干光傳輸標準&#xff0c;顆粒 STM-1/4/16/64…&#xff08;155 M/622 M/2.5 G/10 G&#xff09;。P…

響應式單位rpx及搭配使用UI產品工具

&#x1f3a8;? 歡迎來到RPX與即時設計的前端探索之旅 &#x1f680;&#x1f4bb; 親愛的開發者朋友們&#xff1a; &#x1f44b; 大家好&#xff01;很高興能在CSDN這個技術分享的平臺上與各位相遇&#xff01;&#x1f31f; 作為一名長期奮戰在前端開發一線的工程師&#…

MC0463四大名著-水滸簽到

碼蹄集OJ-四大名著-水滸簽到 一、題目背景 本問題以《水滸傳》為故事經緯&#xff0c;講述史進對數列數字奧秘的探索。小碼妹向其講解特殊數列求和規則&#xff0c;我們需依據規則&#xff0c;對給定長度 n 的數列&#xff0c;按奇偶分組方式計算奇數組和與偶數組和的運算結果…

前綴和 HASH

前綴和 & HASH 個人模板 560. 和為 K 的子數組 class Solution {public int subarraySum(int[] nums, int k) {// 滑動窗口前綴和int n nums.length;int[] prevSum new int[n 1];for (int i 1; i < n 1; i) {prevSum[i] prevSum[i - 1] nums[i - 1];}int ans …

周末總結(2024/07/19)

工作 人際關系核心實踐&#xff1a; 要學會隨時回應別人的善意&#xff0c;執行時間控制在5分鐘以內 遇到接不住的話題時拉低自己&#xff0c;抬高別人(無陰陽氣息) 朋友圈點贊控制在5min以內&#xff0c;職場社交不要放在5min以外 職場的人際關系在面對利益沖突是直接質疑&am…

若依框架開啟注冊功能全流程指南

在若依&#xff08;RuoYi&#xff09;框架中&#xff0c;用戶注冊功能并非默認開啟&#xff0c;需要通過后端配置、前端調整以及必要的角色分配設置來實現。本文將詳細介紹開啟注冊功能的完整步驟&#xff0c;幫助開發者快速完成配置。一、后端配置&#xff1a;開啟注冊功能開關…

STM32單片機_3

第十章IIC通信協議規定, 起始之后主機必須先發送一個字節: 從機地址讀寫位, 進行尋址然后接收一下應答位, 然后再發送一個字節, 寫入從機寄存器地址 之后就可以進行數據的收發了注意: 在 主機的接收應答的時候, 立刻釋放SDA 然后這時候從機會立刻做出反應, 即拉低SDA, 也就是置…

SpringAI_Chat模型_DeepSeek模型--基礎對話

一、前言 Spring AI 提供跨 AI 供應商&#xff08;如 OpenAI、Hugging Face 等&#xff09;的一致性 API, 通過分裝的ChatModel或ChatClient即可輕松調動LLM進行流式或非流式對話。 本專欄主要圍繞著通過OpenAI方式調用各種大語言模型展開學習&#xff08;因為95%以上模型都…

數據結構:字符串(Strings)

目錄 第一性問題&#xff1a;計算機如何表示文字&#xff1f; ASCII&#xff1a;最早的字符編碼標準&#xff08;美國人寫的&#xff09; Unicode&#xff1a;解決全球語言的編碼方案 字符&#xff08;Character&#xff09; ?編輯 為什么字符常量必須加上單引號 &#…

【vue-5】Vue 3 中的 v-model:雙向數據綁定的全面指南

在 Vue 開發中&#xff0c;v-model 是實現表單輸入和應用狀態之間雙向綁定的關鍵指令。Vue 3 對 v-model 進行了重大改進&#xff0c;使其更加靈活和強大。本文將深入探討 Vue 3 中 v-model 的工作原理、新特性以及最佳實踐。 1. v-model 基礎 1.1 什么是 v-model v-model 是 V…

結合自身,制定一套明確的 Web3 學習路線和技術棧建議

目錄 ? 一、結合自身&#xff0c;明確方向和目的 ? 二、技術路線和建議 &#x1f9ed; 技術路線圖&#xff08;按階段劃分&#xff09; 第一階段&#xff1a;鞏固 Web3 基礎&#xff08;1-2 周&#xff09; 第二階段&#xff1a;NFT 平臺開發實戰&#xff08;4-6 周&…

SPARKLE:深度剖析強化學習如何提升語言模型推理能力

摘要&#xff1a;強化學習&#xff08;Reinforcement Learning&#xff0c;RL&#xff09;已經成為賦予語言模型高級推理能力的主導范式。盡管基于 RL 的訓練方法&#xff08;例如 GRPO&#xff09;已經展示了顯著的經驗性收益&#xff0c;但對其優勢的細致理解仍然不足。為了填…

【Linux服務器】-MySQL數據庫參數調優

一、基礎配置 [mysqld] # 聲明以下配置屬于MySQL服務器&#xff08;mysqld&#xff09;[mysqld]&#xff1a;配置文件的模塊標識&#xff0c;表示這是 MySQL 服務器的配置段。 二、路徑與基礎設置 datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock pid-file/var/run/mys…

sqli-labs靶場通關筆記:第32-33關 寬字節注入

第32關 寬字節注入查看一下本關的源代碼&#xff1a;function check_addslashes($string) // 定義一個用于過濾特殊字符的函數&#xff0c;目的是轉義可能用于注入的特殊符號 {$string preg_replace(/. preg_quote(\\) ./, "\\\\\\", $string); // 轉義…

基于Eureka和restTemple的負載均衡

在微服務架構中&#xff0c;基于 Eureka&#xff08;服務注冊中心&#xff09;和 RestTemplate&#xff08;HTTP 客戶端&#xff09;實現負載均衡是常見的方案&#xff0c;核心是通過 Eureka 獲取服務實例列表&#xff0c;再結合負載均衡策略選擇具體服務實例進行調用。以下是詳…