LeetCode 数据结构之存在重复元素

简介: LeetCode 数据结构之存在重复元素

题目


存在重复元素


给你一个整数数组 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


提示:


1 <= nums.length <= 105
-109 <= nums[i] <= 109


题解


解题分析


本题是一个 Leetcode 一个简单级别的题目,主要是考察大家对基础数据结构的掌握。基础数据结无非就是:线性表、栈、队列、串、数组、广义表、树、二叉树、图、排序、查找等内容。下面我们再来看看排序和哈希两种解题的思路。


1. 排序方法


先排序,然后进行遍历数组,如果 nums[i -1 ] == nums[i] 相等,返回 true, 如果都不满足,那么就返回 false.


采用Java 语言答题,我们可以使用系统方法 Arrays.sort 对数组进行排序,底层采用快速排序算法,数组排序的时间复杂度为 O(log(n))


时间复杂度:O(NlogN)


空间复杂度:O(logN)


2. 哈希表方法


创建一个哈希表,然后将数组存入哈希表,判断加入 hash 表是否重复,如果重复返回 true, 如果都不存在返回 false.


时间复杂度:O(N)


空间复杂度:O(N)


解题代码


题解代码如下(代码中有详细的注释说明):


  1. 排序,解题的代码如下:


class Solution {
    public boolean containsDuplicate(int[] nums) {
        // 排序,jdk 采用快速排序的方式
        Arrays.sort(nums);
        for (int i = 1; i < nums.length; i++) {
            if (nums[i -1 ] == nums[i]) {
                return true;
            }
        }
        return false;
    }
}


  1. 哈希方法,解题的代码如下:


class Solution {
    public boolean containsDuplicate(int[] nums) {
        HashSet<Integer> set = new HashSet<>(nums.length);
        for (int i = 0; i < nums.length; i++) {
            if (!set.add(nums[i])) {
                return true;
            }
        }
        return false;
    }
}


提交后反馈结果(采用排序的方法,由于该题目没有进行优化,性能一般):


image.png


参考信息



相关文章
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
195 1
|
11月前
|
机器学习/深度学习 存储 算法
【LeetCode 热题100】347:前 K 个高频元素(详细解析)(Go语言版)
这篇文章详细解析了力扣热题 347——前 K 个高频元素的三种解法:哈希表+小顶堆、哈希表+快速排序和哈希表+桶排序。每种方法都附有清晰的思路讲解和 Go 语言代码实现。小顶堆方法时间复杂度为 O(n log k),适合处理大规模数据;快速排序方法时间复杂度为 O(n log n),适用于数据量较小的场景;桶排序方法在特定条件下能达到线性时间复杂度 O(n)。文章通过对比分析,帮助读者根据实际需求选择最优解法,并提供了完整的代码示例,是一篇非常实用的算法学习资料。
644 90
【LeetCode 27】347.前k个高频元素
【LeetCode 27】347.前k个高频元素
162 0
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
366 4
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
【数据结构OJ题】移除链表元素
力扣题目——移除链表元素
145 2
【数据结构OJ题】移除链表元素
|
算法
【数据结构OJ题】移除元素
力扣题目——移除元素
111 1
【数据结构OJ题】移除元素
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
307 0
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
111 0
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
193 0

热门文章

最新文章