LeetCode双指针与哈希技巧解决面试高频题
需积分: 0 197 浏览量
更新于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 上传
洋葱庄
- 粉丝: 21
- 资源: 311
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南