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.mzph.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;其局限性便显露无遗。遨…