1、题目描述
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
2、VS2019上运行
使用哈希表
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
unordered_map<int, bool> map; // 使用无序哈希表存储数字的出现情况
for (int num : nums) {
if (map[num]) return num; // 如果数字已经在哈希表中出现过,则返回该数字
map[num] = true; // 将数字标记为已经出现
}
return -1; // 如果没有重复数字,则返回-1
}
};
int main() {
vector<int> nums = { 2, 3, 1, 4, 2, 5 }; // 示例输入数组
Solution solution;
int result = solution.findRepeatNumber(nums);
cout << "重复的数字是:" << result << endl;
return 0;
}
运行结果:
重复的数字是:2
3、vector容器
vector容器是C++标准库中的一个动态数组容器,它提供了许多成员函数来操作和管理容器的元素。
1.push_back(): 在vector的末尾添加一个元素。
2.pop_back(): 删除vector末尾的一个元素。
3.insert(): 在指定位置插入一个或多个元素。
4.erase(): 删除指定位置的一个或多个元素。
5.clear(): 清空vector中的所有元素。
6.size(): 返回vector中元素的个数。
7.empty(): 检查vector是否为空。
8.front(): 返回vector的第一个元素。
9.back(): 返回vector的最后一个元素。
10.at(): 返回指定索引位置的元素。
11.resize(): 改变vector的大小。
12.capacity(): 返回当前分配的内存容量。
13.reserve(): 请求分配至少指定数量的内存空间。
14.swap(): 交换两个vector的内容。
15.assign(): 用新的元素替换vector的内容。
16.begin(): 返回指向vector起始位置的迭代器。
17.end(): 返回指向vector末尾位置的迭代器。
18.rbegin(): 返回指向vector末尾位置的反向迭代器。
19.rend(): 返回指向vector起始位置的反向迭代器。
4、哈希表
1、键值对
在一个键值对(key-value pair)中,键(key)和值(value)是两个相关联的概念,用于表示数据的不同部分或属性。
1.键(Key):键是一个唯一的标识符,用于表示一个数据项在集合中的唯一位置。在哈希表(hash table)或字典(dictionary)等数据结构中,键用于查找、插入和删除对应的值。每个键必须是唯一且不可重复的,它可以是数字、字符串或其他可哈希的数据类型。
2.值(Value):值是与键相关联的数据内容,它表示键所对应的具体信息、属性或数值。值可以是任意类型的数据,例如整数、浮点数、字符串、对象,甚至是其他复杂的数据结构。在哈希表中,通过键可以获取对应的值。
键和值之间建立了一种映射关系,通过键可以快速访问和检索相应的值。因此,键值对结构常被用于存储和管理数据,例如在字典、数据库、缓存等场景中。无序哈希表(unordered_map)就是一种使用键值对存储数据的数据结构。