当前位置: 首页 > news >正文

哈希表_存在重复元素|、存在重复元素||_C++

哈希表_存在重复元素|、存在重复元素||_C++

  • 1. 存在重复元素|
  • 2. 存在重复元素||


1. 存在重复元素|


leetcode链接:https://leetcode.cn/problems/contains-duplicate/description/

1. 题目描述

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

  • 示例 1:

输入:nums = [1,2,3,1]
输出:true
  • 解释:元素 1 在下标 0 和 3 出现。

2. 算法原理

  • 遍历数组,并将元素加入hash表中,如果出现某一个元素数量大于1的情况,则说明出现了重复元素。

3. 代码实现

class Solution {
public:bool containsDuplicate(vector<int>& nums) {unordered_map<int, int> hash;int n = nums.size();for (int i = 0; i < n; i++){hash[nums[i]]++;if (hash[nums[i]] > 1) return true;}return false;}
};

2. 存在重复元素||


leetcode链接:https://leetcode.cn/problems/contains-duplicate-ii/description/

1. 题目描述

  • 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j]abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false

  • 示例 1:

输入:nums = [1,2,3,1], k = 3
输出:true
  • 示例 2:
输入:nums = [1,0,1,1], k = 1
输出:true
  • 示例 3:
输入:nums = [1,2,3,1,2,3], k = 2
输出:false

2. 算法原理

  • 还是从前往后遍历,同时将元素加入hash。由于本题需要判断下标之间的差是否满足条件,所以hash的定义为<nums[i], i>,即值存的是下标。

3. 代码实现

class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> hash;for (int i = 0; i < nums.size(); i++){if (hash.count(nums[i])){if (abs(hash[nums[i]] - i) <= k)return true;elsehash[nums[i]] = i;}elsehash[nums[i]] = i;}return false;}
};


http://www.mrgr.cn/news/44758.html

相关文章:

  • C++游戏开发:探索与挑战
  • Java中的标识符和关键字
  • 小红书引流的4大方法
  • 【Codeforces】CF 2014 G
  • 感知机学习算法
  • 手机一键换IP地址软件:功能、应用与选择指南‌
  • 基于SpringBoot+Vue+MySQL的药品信息管理系统
  • C语言文件操作(上)(27)
  • python的字典介绍
  • Leetcode 3310. Remove Methods From Project
  • JavaScript(JS)基础(一)
  • 算法题总结(十)——二叉树上
  • 货仓选址(贪心)
  • 制作U盘启动盘1 — UltraISO
  • 操作系统实验之内存管理
  • 分享一个我开发的操作系统镜像下载站
  • 点,点间连接的数学构型系统
  • javaScript操作节点(6个案例+代码+效果)
  • javaScript操作dom的事件(3个案例+代码+效果图)
  • k8s学习