剑指Offer03.数组中重复的数字 C++

文章介绍了如何在C++中利用哈希表(unordered_map)解决数组中重复数字的问题。通过遍历数组,将数字作为键存入哈希表,如果键已存在则返回该数字,实现找到数组中任意一个重复的数字。示例代码展示了在VS2019环境下,给定数组[2,3,1,0,2,5,3]时,正确找到重复数字2的过程。此外,还简述了C++中的vector容器及其常用操作,以及哈希表中的键值对概念。
摘要由CSDN通过智能技术生成

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)就是一种使用键值对存储数据的数据结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值