LeetCode双指针与哈希技巧解决面试高频题
需积分: 0 128 浏览量
更新于2024-08-05
收藏 486KB PDF 举报
本资源主要介绍了三个经典的LeetCode算法题目,涉及字符串反转、前K个高频元素和两个数组的交集II问题,这些题目都是面试时常被考察的基础技巧。
1. 反转字符串 (LeetCode 344)
- 题目要求通过双指针法实现字符串s的反转。定义两个指针i和j,初始时i指向字符串开头,j指向结尾。当i小于j时,交换s[i]和s[j]的值,直到i和j相遇。此操作体现了数组操作的基本技巧,用于处理字符串或数组的对称性质。
```cpp
void reverseString(vector<char>& s) {
int n = s.size();
for (int i = 0, j = n - 1; i < j; i++, j--) {
swap(s[i], s[j]);
}
}
```
2. 前K个高频元素 (LeetCode 347)
- 这道题要求找出数组中出现频率最高的前k个元素。首先,通过计数排序的方式统计每个元素出现的次数,存储在unordered_map cnt中。接着,计算出现次数大于等于第k高频率元素下界的索引i。最后,遍历cnt,将出现次数大于等于i的元素添加到结果数组res中。
```cpp
vector<int> topKFrequent(vector<int>& nums, int k) {
// ...
int i = n, t = 0;
while (t < k) t += s[i--]; // 找到k的下界
// ...
}
```
3. 两个数组的交集II (LeetCode 350)
- 本题要求找出两个整数数组nums1和nums2中的公共元素,但不考虑重复元素。通过哈希表(unordered_map)实现,首先遍历nums1,更新哈希表cnt的元素计数。然后遍历nums2,若元素x在哈希表中存在,将其添加到结果数组res并减少计数。最后返回不重复的公共元素res。
```cpp
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> cnt;
// ...
vector<int> res;
for (auto& p : cnt) {
if (p.second > i) res.push_back(p.first);
}
return res;
}
```
这些题目展示了数据结构和算法在实际编程中的应用,包括双指针策略、计数排序以及哈希表的使用。理解和掌握这些问题有助于提升在面试中解决类似问题的能力,同时也是对基础算法熟练度的检验。
2022-08-04 上传
2022-08-04 上传
2022-08-04 上传
2022-08-04 上传
2022-08-04 上传
2021-06-30 上传
2020-02-15 上传
2021-03-14 上传
点击了解资源详情
洋葱庄
- 粉丝: 21
- 资源: 311
最新资源
- 开源通讯录备份系统项目,易于复刻与扩展
- 探索NX二次开发:UF_DRF_ask_id_symbol_geometry函数详解
- Vuex使用教程:详细资料包解析与实践
- 汉印A300蓝牙打印机安卓App开发教程与资源
- kkFileView 4.4.0-beta版:Windows下的解压缩文件预览器
- ChatGPT对战Bard:一场AI的深度测评与比较
- 稳定版MySQL连接Java的驱动包MySQL Connector/J 5.1.38发布
- Zabbix监控系统离线安装包下载指南
- JavaScript Promise代码解析与应用
- 基于JAVA和SQL的离散数学题库管理系统开发与应用
- 竞赛项目申报系统:SpringBoot与Vue.js结合毕业设计
- JAVA+SQL打造离散数学题库管理系统:源代码与文档全览
- C#代码实现装箱与转换的详细解析
- 利用ChatGPT深入了解行业的快速方法论
- C语言链表操作实战解析与代码示例
- 大学生选修选课系统设计与实现:源码及数据库架构