算法题每日一练---第77天:存在重复元素

简介: 给你一个整数数组 nums 。

4.png

一、问题描述


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


题目链接:存在重复元素

二、题目要求


样例 1

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


样例 2

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


考察

哈希表、排序、判重
建议用时10~25min


三、问题分析


这一题比较简单,主要还是考察判断重复元素的思想。不要一开始就用双重for循环判断,会超时的。

有下面几种代替方法:づ ̄ 3 ̄)づ


1.哈希计数

先循环遍历数组元素,用哈希表存储每一个数字出现的次数,如果存储的时候发现这个数字出现过了,就返回true,否则最后返回false;


2.set存储

set有一个特点,存入的重复元素会自动跳过,不在存储。

所以,有重复元素的数组经过set之后,长度肯定变小。


3.排序判断

排序如何判断重复元素呢?

首先,以样例 1为例,排序后的结果是:

1 1 2 3

第一个数字不需要判断,从第二个数字开始,如果与前一个数字相同,就返回true,否则返回true;


四、编码实现


1.哈希计数

classSolution {
public:
boolcontainsDuplicate(vector<int>&nums) {
inti,n=nums.size();//初始化map<int,int>m;//哈希计数for(i=0;i<n;i++)
        {
m[nums[i]]++;//计数if(m[nums[i]]>=2)//条件判断returntrue;
        }
returnfalse;
    }
};


2.set存储

classSolution {
public:
boolcontainsDuplicate(vector<int>&nums) {
inti,n=nums.size();//初始化set<int>s;//set存储for(i=0;i<n;i++)
s.insert(nums[i]);//插入if(s.size()<n)//发现数组长度变小,存在重复元素returntrue;
elsereturnfalse;
    }
};


3.排序判断

classSolution {
public:
boolcontainsDuplicate(vector<int>&nums) {
inti,n=nums.size();//初始化sort(nums.begin(),nums.end());//排序for(i=1;i<n;i++)
if(nums[i]==nums[i-1])//判重returntrue;
returnfalse;
    }
};

五、测试结果9.png10.png

总体来看,三种方法都差不多,非要比较的话,第三种好一点。

相关文章
|
7月前
|
算法 Java
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
52 1
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
54 3
|
4月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
45 4
|
6月前
|
算法
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素
27 0
|
2月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
112 0
|
6月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
67 1
|
6月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
6月前
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
85 3
|
6月前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
下一篇
DataWorks