LeetCode Hot100 (1/100)

目錄

一、有關數組和動態數組的排序(sort函數)

?1.普通數組的排序

基本用法

降序排序

2.vector的排序

基本用法

降序排序

二、數組長度和一些vector的基本語法

1. 靜態數組長度計算?

?2. 安全獲取數組長度(C++17 起)?

?3.vector 基本語法?

3.1?聲明與初始化??

??3.2?常用操作?

3.3數組轉換成vector

三、列表初始化

?1. ??基礎概念??

2. ??常見場景??

3. ??底層原理??

4.return?時的列表初始化

????????4.1. ??直接返回列表??

????????4.2???對比傳統寫法??

5.特殊場景處理

????????5.1???返回空容器?

????????5.2???返回嵌套結構

6.注意事項

????????6.1類型匹配?????????

????????6.2?函數返回類型必須明確?

題目1----兩數之和

1.空模板解析

2.實際后臺運行版本

3.哈希表

3.1 unordered_map

1. ??核心特性??

2. ??常用函數(表格)??

?3. ??代碼用法示例?

3.2 unordered_set

1. ??核心特性??

2. ??常用函數(表格)??

3. ??代碼用法示例?

4.題解


一、有關數組和動態數組的排序(sort函數)

?1.普通數組的排序
基本用法
#include <algorithm> // 必須包含的頭文件int main() {int arr[] = {5, 3, 9, 1, 7};int n = sizeof(arr) / sizeof(arr[0]); // 計算數組長度// 默認升序排序(從小到大)std::sort(arr, arr + n); // 參數為指針范圍:[arr, arr + n)// 輸出結果:1 3 5 7 9return 0;
}
降序排序
#include <algorithm>
#include <functional> // 需要包含此頭文件以使用 greater<>int main() {int arr[] = {5, 3, 9, 1, 7};int n = sizeof(arr) / sizeof(arr[0]);// 使用 greater<int>() 降序排序std::sort(arr, arr + n, std::greater<int>());// 輸出結果:9 7 5 3 1return 0;
}
2.vector的排序
基本用法
#include <algorithm>
#include <vector>int main() {std::vector<int> vec = {5, 3, 9, 1, 7};// 默認升序排序std::sort(vec.begin(), vec.end()); // 參數為迭代器范圍// 輸出結果:1 3 5 7 9return 0;
}
降序排序
#include <algorithm>
#include <vector>
#include <functional>int main() {std::vector<int> vec = {5, 3, 9, 1, 7};// 降序排序std::sort(vec.begin(), vec.end(), std::greater<int>());// 輸出結果:9 7 5 3 1return 0;
}

二、數組長度和一些vector的基本語法

1. 靜態數組長度計算?
int arr[] = {3, 1, 4, 1, 5, 9};
int length = sizeof(arr) / sizeof(arr[0]); // 計算元素個數

?數組作為函數參數傳遞時會退化為指針,此時?sizeof(arr)?返回指針大小而非數組大小

錯誤示例:

void func(int arr[]) {int len = sizeof(arr)/sizeof(arr[0]); // 錯誤!返回指針大小/元素大小的比值
}
?2. 安全獲取數組長度(C++17 起)?
#include <iterator>
int arr[] = {1, 2, 3};
int length = std::size(arr); // 直接獲取數組長度(需C++17及以上)
?3.vector 基本語法?
3.1?聲明與初始化??
語法說明示例
??默認初始化??創建空 vectorvector<int> v1;
??列表初始化??直接初始化元素vector<int> v2 = {1, 2, 3};
??指定大小和值??創建含?n?個?val?的 vectorvector<int> v3(5, 10); // 5個10
??拷貝初始化??復制另一個 vectorvector<int> v4(v3);
??3.2?常用操作?
操作語法說明
??添加元素??push_back(val)在末尾插入元素
??訪問元素??v[i]?或?v.at(i)下標訪問(at()?會檢查邊界)
??獲取大小??v.size()返回元素個數
??判斷空??v.empty()返回是否為空
??清空元素??v.clear()移除所有元素
??調整大小??v.resize(n, val)調整大小為?n,新增元素初始化為?val
3.3數組轉換成vector
int arr[] = {5, 2, 8};
vector<int> v(arr, arr + sizeof(arr)/sizeof(arr[0]));

三、列表初始化

?1. ??基礎概念??

列表初始化使用 ??花括號?{}?? 初始化對象,是 C++11 引入的??統一初始化語法??,適用于所有類型。

2. ??常見場景??
場景示例等效傳統寫法
??初始化變量??vector<int> v = {1, 2, 3};vector<int> v; v.push_back(1); ...
??函數返回值??return {i, j};return vector<int>{i, j};
??構造函數參數??pair<int, string> p{5, "test"};pair<int, string> p(5, "test");
3. ??底層原理??
  • 編譯器會嘗試將?{}?中的內容轉換為目標類型的?initializer_list
  • 對?vector?來說,內部定義了接受?initializer_list?的構造函數:
4.return?時的列表初始化
????????4.1. ??直接返回列表??
vector<int> twoSum(...) {return {i, j}; // 隱式構造 vector<int> 對象
}

等效代碼:

vector<int> temp;
temp.push_back(i);
temp.push_back(j);
return temp;
????????4.2???對比傳統寫法??
寫法性能可讀性
return {i, j};? 更優(直接構造)? 簡潔
return vector<int>{i, j};? 相同? 冗余
vector<int> res; ... return res;? 可能拷貝? 冗長
5.特殊場景處理
????????5.1???返回空容器?
return {}; // 返回空 vector,等效 return vector<int>();
????????5.2???返回嵌套結構
vector<pair<int, int>> func() {return {{1, 2}, {3, 4}}; // 列表初始化嵌套結構
}
6.注意事項
????????6.1類型匹配?????????
// 錯誤示例:列表元素類型不匹配
vector<string> v = {1, 2}; // int 無法隱式轉為 string
????????6.2?函數返回類型必須明確?
auto func() { // 錯誤:無法推導返回類型return {1, 2}; 
}
vector<int> func() { // 正確return {1, 2};
}

題目1----兩數之和

1.空模板解析
// 頭文件(通常在LeetCode平臺已隱式包含,但本地編譯需手動添加)
// #include <vector>
// using namespace std;// 定義解決方案類(LeetCode答題標準模板)
class Solution {
public: // 訪問權限修飾符,表示以下成員對外公開(LeetCode需要調用該函數)// 定義名為twoSum的成員函數// 參數說明:// vector<int>& nums → 整型向量的引用(避免拷貝整個數組)// int target → 整型目標值// 返回值:vector<int> → 包含兩個索引的向量vector<int> twoSum(vector<int>& nums, int target) {// 函數實現區(需補全)return {}; // 無解時返回空向量(題目保證有解時可省略)*/}/* 關鍵語法說明:1. vector<int>& → 引用傳遞參數,直接操作原數組(避免拷貝)2. nums.size() → 獲取向量元素數量(等效于數組長度)3. {i, j} → C++11統一初始化,等價于 vector<int>{i, j}};
2.實際后臺運行版本
#include <iostream>
#include <vector>
using namespace std;class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {for (int i = 0; i < nums.size(); ++i) {for (int j = i + 1; j < nums.size(); ++j) {if (nums[i] + nums[j] == target) {return {i, j};}}}return {}; // 實際題目保證有解,此句僅為編譯通過}
};// 測試用例
int main() {vector<int> nums = {2, 7, 11, 15};int target = 9;Solution sol;vector<int> res = sol.twoSum(nums, target);cout << "[" << res[0] << ", " << res[1] << "]" << endl; // 輸出 [0, 1]return 0;
}
3.哈希表

在 C++ 中,哈希表主要通過?unordered_map(鍵值對)和?unordered_set(唯一鍵集合)實現

特性unordered_mapunordered_set
??存儲內容??鍵值對(key-value唯一值(value
??查找依據??鍵(key值本身(value
??典型應用場景??需要快速通過鍵訪問值的場景需要快速判斷元素是否存在的場景

哈希表原理:?

哈希表實現:哈希表C++哈希表詳解(知識點+相關LeetCode題目)-CSDN博客

3.1 unordered_map
1. ??核心特性??
  • 存儲鍵值對(key-value),鍵唯一
  • 基于哈希表實現,查找時間復雜度平均為 ??O(1)??
  • 無序存儲(元素順序與插入順序無關)
2. ??常用函數(表格)??
函數/操作說明時間復雜度
unordered_map<K, V> map;初始化空哈希表O(1)
map[key] = value;插入或修改鍵值對(若?key?存在則覆蓋)平均 O(1)
map.insert({key, value});插入鍵值對(若?key?存在則不插入)平均 O(1)
map.find(key)返回指向鍵的迭代器(若不存在返回?end()平均 O(1)
map.count(key)返回鍵存在的次數(0 或 1)平均 O(1)
map.erase(key)刪除指定鍵的鍵值對平均 O(1)
map.size()返回元素個數O(1)
map.empty()判斷哈希表是否為空O(1)
?3. ??代碼用法示例?
#include <unordered_map>
#include <iostream>
using namespace std;int main() {// 初始化unordered_map<string, int> scores = {{"Alice", 90}, {"Bob", 85}};// 插入元素scores["Charlie"] = 88;          // 方式1:operator[]scores.insert({"David", 95});    // 方式2:insert// 訪問元素cout << "Alice的分數: " << scores["Alice"] << endl; // 直接訪問if (scores.find("Eve") != scores.end()) {          // 安全訪問cout << "Eve存在" << endl;}// 刪除元素scores.erase("Bob");// 遍歷for (const auto& pair : scores) {cout << pair.first << ": " << pair.second << endl;}return 0;
}
3.2 unordered_set
1. ??核心特性??
  • 存儲唯一元素(無重復值)
  • 基于哈希表實現,查找時間復雜度平均為 ??O(1)??
  • 無序存儲
2. ??常用函數(表格)??
函數/操作說明時間復雜度
unordered_set<T> set;初始化空集合O(1)
set.insert(value);插入元素(若存在則不插入)平均 O(1)
set.find(value)返回指向元素的迭代器(若不存在返回?end()平均 O(1)
set.count(value)返回元素存在的次數(0 或 1)平均 O(1)
set.erase(value)刪除元素平均 O(1)
set.size()返回元素個數O(1)
set.empty()判斷集合是否為空O(1)
3. ??代碼用法示例?
#include <unordered_set>
#include <iostream>
using namespace std;int main() {// 初始化unordered_set<int> primes = {2, 3, 5, 7};// 插入元素primes.insert(11);primes.insert({13, 17}); // 插入多個元素// 查詢元素if (primes.count(5) > 0) {cout << "5是質數" << endl;}// 刪除元素primes.erase(7);// 遍歷for (const auto& num : primes) {cout << num << " ";}return 0;
}
4.題解

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {//兩個for循環復雜度也就 n方// for(int i=0;i<nums.size();i++)
// for(int j=i+1;j<nums.size();j++)
// {
//     if(nums[i]+nums[j]==target) return {i,j};  
// }//哈希表,注意題目里的可以按任意順序返回答案,其實有暗示的意思unordered_map<int,int> m;
//由于不知道這兩個數是那兩個數,一種方法是把數組全部先放到哈希表里,然后遍歷哈希表(麻煩)
// 可以每次往哈希表里插入的時候,就檢查一下,前面插入的數有沒有匹配的(檢查的復雜度為1)for(int i=0;i<nums.size();i++)
{if (m.find((target-nums[i]))!=m.end()) return {m[target-nums[i]],i};else{m[nums[i]]=i;}
}return {};}
};

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

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

相關文章

通過MCP讓LLM調用系統接口

場景 MCP的出現大大豐富了LLM的功能&#xff0c;對于存量系統&#xff0c;我們希望能讓模型調用已有的接口&#xff0c;以最小的成本讓AI能夠獲取系統內部數據。因此我們開發了一個名為http-api-call的MCP Server&#xff0c;來支持模型到內部API的調用 實現方案 使用用標準…

基于Transformer的多資產收益預測模型實戰(附PyTorch實現與避坑指南)

基于Transformer的多資產收益預測模型實戰(附PyTorch模型訓練及可視化完整代碼) 一、項目背景與目標 在量化投資領域,利用時間序列數據預測資產收益是核心任務之一。傳統方法如LSTM難以捕捉資產間的復雜依賴關系,而Transformer架構通過自注意力機制能有效建模多資產間的聯…

養生:打造健康生活的全方位策略

在生活節奏不斷加快的當下&#xff0c;養生已成為提升生活質量、維護身心平衡的重要方式。從飲食、運動到睡眠&#xff0c;再到心態調節&#xff0c;各個方面的養生之道共同構建起健康生活的堅實基礎。以下為您詳細介紹養生的關鍵要點&#xff0c;助您擁抱健康生活。 飲食養生…

輕型汽車鼓式液壓制動器系統設計

一、設計基礎參數 1.1 整車匹配參數 參數項數值范圍整備質量1200-1500kg最大設計車速160km/h輪胎規格195/65 R15制動法規要求GB 12676-2014 1.2 制動性能指標 制動減速度&#xff1a;≥6.2m/s&#xff08;0型試驗&#xff09; 熱衰退率&#xff1a;≤30%&#xff08;連續10…

無法更新Google Chrome的解決問題

解決問題&#xff1a;原文鏈接&#xff1a;【百分百成功】Window 10 Google Chrome無法啟動更新檢查&#xff08;錯誤代碼為1&#xff1a;0x80004005&#xff09; google谷歌chrome瀏覽器無法更新Chrome無法更新至最新版本&#xff1f; 下載了 就是更新Google Chrome了

【AAAI 2025】 Local Conditional Controlling for Text-to-Image Diffusion Models

Local Conditional Controlling for Text-to-Image Diffusion Models&#xff08;文本到圖像擴散模型的局部條件控制&#xff09; 文章目錄 內容摘要關鍵詞作者及研究團隊項目主頁01 研究領域待解決問題02 論文解決的核心問題03 關鍵解決方案04 主要貢獻05 相關研究工作06 解決…

Kuka AI音樂AI音樂開發「人聲伴奏分離」 —— 「Kuka Api系列|中文咬字清晰|AI音樂API」第6篇

導讀 今天我們來了解一下 Kuka API 的人聲與伴奏分離功能。 所謂“人聲伴奏分離”&#xff0c;顧名思義&#xff0c;就是將一段完整的音頻拆分為兩個獨立的軌道&#xff1a;一個是人聲部分&#xff0c;另一個是伴奏&#xff08;樂器&#xff09;部分。 這個功能在音樂創作和…

Idea 設置編碼UTF-8 Idea中 .properties 配置文件中文亂碼

Idea 設置編碼UTF-8 Idea中 .properties 配置文件中文亂碼 一、設置編碼 1、步驟&#xff1a; File -> Setting -> Editor -> File encodings --> 設置編碼二、配置文件中文亂碼 1、步驟&#xff1a; File -> Setting -> Editor -> File encodings ->…

Xilinx FPGA PCIe | XDMA IP 核 / 應用 / 測試 / 實踐

注&#xff1a;本文為 “Xilinx FPGA 中 PCIe 技術與 XDMA IP 核的應用” 相關文章合輯。 圖片清晰度受引文原圖所限。 略作重排&#xff0c;未整理去重。 如有內容異常&#xff0c;請看原文。 FPGA&#xff08;基于 Xilinx&#xff09;中 PCIe 介紹以及 IP 核 XDMA 的使用 N…

sqli—labs第六關——雙引號報錯注入

一&#xff1a;判斷輸入類型 首先測試 ?id1&#xff0c;?id1&#xff0c;?id1"&#xff0c;頁面回顯均無變化 所以我們采用簡單的布爾測試&#xff0c;分別測試數字型&#xff0c;單引號&#xff0c;雙引號 然后發現&#xff0c;只有在測試到雙引號注入的時候符合關鍵…

【TroubleShoot】禁用Unity Render Graph API 兼容模式

使用Unity 6時新建了項目&#xff0c;有一個警告提示&#xff1a; The project currently uses the compatibility mode where the Render Graph API is disabled. Support for this mode will be removed in future Unity versions. Migrate existing ScriptableRenderPasses…

圖形學、人機交互、VR/AR、可視化等領域文獻速讀【持續更新中...】

&#xff08;1&#xff09;筆者在時間有限的情況下&#xff0c;想要多積累一些自身課題之外的新文獻、新知識&#xff0c;所以開了這一篇文章。 &#xff08;2&#xff09;想通過將文獻喂給大模型&#xff0c;并向大模型提問的方式來快速理解文獻的重要信息&#xff08;如基礎i…

Hadoop-HDFS-Packet含義及作用

在 HDFS&#xff08;Hadoop Distributed File System&#xff09;中&#xff0c;Packet 是數據讀寫過程中用于數據傳輸的基本單位。它是 HDFS 客戶端與數據節點&#xff08;DataNode&#xff09;之間進行數據交互時的核心概念&#xff0c;尤其在寫入和讀取文件時&#xff0c;Pa…

顯示的圖標跟UI界面對應不上。

圖片跟UI界面不符合。 要找到對應dp的值。UI的dp要跟代碼里的xml文件里的dp要對應起來。 藍湖里設置一個寬度給對應上。然后把對應的值填入xml. 一個屏幕上的圖片到底是用topmarin來設置&#xff0c;還是用bottommarin來設置。 因為第一節&#xff0c;5&#xff0c;7 車廂的…

【taro3 + vue3 + webpack4】在微信小程序中的請求封裝及使用

前言 正在寫一個 以taro3 vue3 webpack4為基礎框架的微信小程序&#xff0c;之前一直沒有記咋寫的&#xff0c;現在總結記錄一下。uniapp vite 的后面出。 文章目錄 前言一、創建環境配置文件二、 配置 Taro 環境變量三、 創建請求封裝四、如何上傳到微信小程序體驗版1.第二…

LeetCode:513、找樹左下角的值

//遞歸法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* t…

采用均線策略來跟蹤和投資基金

策略來源#睿思量化#小程序 截圖來源#睿思量化#小程序 在基金投資中&#xff0c;趨勢跟蹤策略是一種備受關注的交易方法。本文將基于兩張關于廣發電子信息傳媒股票 A&#xff08;代碼&#xff1a;005310&#xff09;的圖片資料&#xff0c;詳細闡述這一策略的應用與效果。 從第…

leetcode刷題---二分查找

力扣題目鏈接 二分查找算法使用前提&#xff1a;有序數組&#xff1b;數組內無重復元素 易錯點&#xff1a; 1.while循環的邊界條件&#xff1a;如到底是 while(left < right) 還是 while(left < right) 2.if條件后right&#xff0c;left的取值&#xff1a;到底是 right …

(leetcode) 力扣100 10.和為K的子數組(前綴和+哈希)

題目 給你一個整數數組 nums 和一個整數 k &#xff0c;請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 數據范圍 1 < nums.length < 2 * 104 -1000 < nums[i] < 1000 -107 < k < 107 樣例 示例 1&#xff1a; 輸…

遨游衛星電話與普通手機有什么區別?

在數字化浪潮席卷全球的今天&#xff0c;通信設備的角色早已超越傳統語音工具&#xff0c;成為連接物理世界與數字世界的核心樞紐。然而&#xff0c;當普通手機在都市叢林中游刃有余時&#xff0c;面對偏遠地區、危險作業場景的應急通信需求&#xff0c;其局限性便顯露無遺。遨…