首页 > 其他分享 >用哈希表求解力扣第217题 存在重复元素

用哈希表求解力扣第217题 存在重复元素

时间:2024-08-27 11:51:38浏览次数:7  
标签:217 数组 nums map 元素 力扣 哈希 表中

前言

记录一下刷题历程 力扣第217题存在重复元素


两数之和

原题目:给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
示例 1:

输入:nums = [1,2,3,1]
输出:true
示例 2:

输入:nums = [1,2,3,4]
输出:false
示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true

分析

可以使用一个哈希表用来存储数组中的元素和出现情况。遍历数组检查当前数组元素是否意境存入哈希表中,如果存在则找到了重复元素,如果没有则将该元素存入哈希表中

代码如下:

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        // 创建一个哈希表(unordered_map),用于存储数组中的元素及其出现情况
        unordered_map<int, int> u_map;
        
        // 遍历数组中的每一个元素
        for (int i = 0; i < nums.size(); i++) {
            // 检查当前元素是否已经存在于哈希表中
            if (u_map.count(nums[i])) {
                // 如果存在,说明找到了重复的元素
                return true;
            }
            
            // 如果不存在,将当前元素和其值(这里值为1,表示出现过)加入哈希表
            u_map[nums[i]] = 1;
        }
        
        // 如果遍历完数组没有找到重复的元素,返回 false
        return false;
    }
};

解释注释

1.unordered_map<int, int> u_map;

创建一个 unordered_map(哈希表)u_map,用于存储数组中每个元素及其出现情况。键是元素的值,值是一个整数(在这里值是 1,表示该元素出现过)。

2.if (u_map.count(nums[i]))

使用 count 函数检查哈希表中是否存在当前元素 nums[i]。count 函数返回元素在哈希表中出现的次数,如果返回值大于 0,说明元素已经存在。

3.u_map[nums[i]] = 1;

如果当前元素不在哈希表中,将其加入哈希表,并将对应的值设置为 1。这表示该元素已经出现过一次。

时间复杂度

这个方法的时间复杂度是 O(n),其中 n 是数组 nums 的大小,因为每个元素被遍历一次。哈希表的插入和查找操作都是常数时间复杂度,因此整体时间复杂度是 O(n)。

标签:217,数组,nums,map,元素,力扣,哈希,表中
From: https://blog.csdn.net/buaichifanqie/article/details/141528165

相关文章

  • 程序员必备的的5个刷题网站。大厂面试稳了 力扣 https://leetcode.cn
    程序员必备的的5个刷题网站。大厂面试稳了力扣https://leetcode.cn1、leetcode力扣。网址:https://leetcode.cnLeetCode是一个定位为求职的刷题网站,其中又以算法题为主。很多大厂在面试的时候,都会考算法。有空就刷一刷这里面的算法题,你的算法水平肯定会有大幅的提升,不管是求职,......
  • 【Leetcode 2032 】 至少在两个数组中出现的值 —— 哈希表与按位运算符(最全的注解)
    给你三个整数数组 nums1、nums2 和 nums3 ,请你构造并返回一个 元素各不相同的 数组,且由 至少 在 两个 数组中出现的所有值组成。数组中的元素可以按 任意 顺序排列。示例1:输入:nums1=[1,1,3,2],nums2=[2,3],nums3=[3]输出:[3,2]解释:至少在两个数组中出......
  • LeetCode 690. 员工的重要性(哈希表、深度优先搜索dfs)
    题目:690.员工的重要性思路:先用哈希表map将每个员工的信息映射到员工ID对应的下标位置。接着使用深度优先搜索dfs,来记录总和即可。细节看注释/*//DefinitionforEmployee.classEmployee{public:intid;intimportance;vector<int>subordinates;......
  • 题解:P5217 贫穷
    题意维护一个字符串,支持以下操作:\(\texttt{Ixc}\),在第\(x\)个字母后面插入一个\(c\)。\(\texttt{Dx}\),删除第\(x\)个字母。\(\texttt{Rxy}\),反转当前文本中的区间\([x,y]\)。\(\texttt{Px}\),输出初始文本中第\(x\)个字母在当前文本中的位置。特别地,若不存在,......
  • 【数据结构-前缀异或和】力扣1177. 构建回文串检测
    给你一个字符串s,请你对s的子串进行检测。每次检测,待检子串都可以表示为queries[i]=[left,right,k]。我们可以重新排列子串s[left],…,s[right],并从中选择最多k项替换成任何小写英文字母。如果在上述检测过程中,子串可以变成回文形式的字符串,那么检测结果为......
  • 力扣刷题(1)
    两数之和两数之和-力扣思路:动态开辟一个数组,用来存放下标;两个for循环嵌套来判断,数组中的两个数相加是否与target相等若相等,则将*returnSize赋值为2,表示数组中两个数,并将arr数组进行赋值若不存在两数相加为target的数,则将*returnSize赋值为0int*twoSum(int*nums,in......
  • 秋招力扣Hot100刷题总结——二叉树
    二叉树相关的题目基本上都会使用递归,因此做二叉树的题目时首先使用递归,明确递归结束的条件。1.二叉树的层序遍历题目链接题目要求:给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。代码及思路使用队列存储每一层的节点,左边节点先......
  • 力扣热题100_贪心算法_55_跳跃游戏
    文章目录题目链接解题思路解题代码题目链接55.跳跃游戏给你一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。示例1:输入:nums=[......
  • 力扣: 设计链表
    文章目录需求代码结尾需求你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果是双向链表,则还需要属性prev以指示链表中的上一个节点。假设链表中的......
  • 力扣: 移除链表元素
    文章目录需求虚拟头结点法原头结点法结尾需求给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输......