问题:

给一个整数数组 nums 。

如果任一值在数组中出现 至少两次 ,返回 true ;

如果数组中每个元素互不相同,返回 false 。

  

例如:

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

输出:true

代码

main函数

public class DS20230106 {public static void main(String[] args) {int[] arrs1 = {9,8,7,6,1,2,3};          //falseint[] arrs2 = {9,8,8,6,1,2,3};          //trueboolean ds1 = containsDuplicate1(arrs1);boolean ds2 = containsDuplicate2(arrs2);System.out.println(ds1);System.out.println(ds2);}
}

方法一:排序

在对数字从小到大"排序"之后,数组的重复元素一定出现在"相邻"位置中。★

因此,我们可以 扫描 已排序的数组,

每次判断 相邻的两个元素是否相等,如果相等,则说明存在重复的元素。

复杂度分析

时间复杂度:O(NlogN),其中 N 为数组的长度。需要对数组进行排序。

空间复杂度:O(logN),其中 N 为数组的长度。注意我们在这里应当考虑递归调用栈的深度。

public static boolean containsDuplicate1(int[] nums) {//将数组的指定范围按升序排序Arrays.sort(nums);int n = nums.length;//      遍历for (int i = 0; i < n - 1; i++) {
//          判断:若相邻的元素相等,则返回trueif (nums[i] == nums[i + 1]) {return true;}}return false;}

补充:

数组方法:Array.sort

  将数组的指定范围按升序排序。要排序的范围从索引{@code fromIndex}(包含)扩展到索引{@code toIndex}(排除)。

  如果{@code fromIndex == toIndex},要排序的范围为空。

实现说明:

排序算法是由Vladimir Yaroslavskiy, Jon Bentley和Joshua Bloch设计的双枢轴快速排序。该算法在许多数据集上提供O(n log(n))性能,导致其他快速排序降低到二次排序性能,并且通常比传统的(单枢轴)快速排序实现更快。

方法二:哈希表

对于数组中每个元素,我们将它插入到哈希表中。

如果插入一个元素时发现该元素已经存在于哈希表中,则说明存在重复的元素

复杂度分析

时间复杂度:O(N),其中 N 为数组的长度。

空间复杂度:O(N),其中 N 为数组的长度。

public static boolean containsDuplicate2(int[] nums) {Set<Integer> set = new HashSet<Integer>();//        对于数组中每个元素,我们将它插入到哈希表中。for (int x : nums) {
//            如果插入一个元素时发现该元素已经存在于哈希表中,则说明存在重复的元素。★利用了set的特性if (!set.add(x)) {return true;}}return false;}

补充:

HashSet

构造一个包含指定集合中的元素的新集合。

创建HashMap时使用默认负载因子(0.75)和足以包含指定集合中的元素的初始容量。

如果指定的集合为空,则会抛出NullPointerException异常。

static

作用:用于内存管理

根据作用范围:

变量:称为类变量、静态变量

方法(指被 static 修饰的成员方法):称为类方法、静态方法

属于类,而不属于类的对象。

1)它通过类直接被调用,无需创建类的对象。★

2)静态方法中,不能使用 this 关键字,也不能直接访问所属类的实例变量和实例方法;

3)静态方法中,可以直接访问所属类的静态变量和静态方法。

4)同this 关键字,super 关键字也与类的实例相关,静态方法中不能使用 super 关键字。

代码块:称为静态代码块

作用:用于类初始化时,为类的静态变量赋初始值,提升程序性能。

特点:

1.静态代码块,有点类似于一个方法,但不可以存在于任何方法体内。

2.静态代码块,可以置于类中的任何地方,类中可以有多个静态初始化块。

3.Java 虚拟机在加载类时执行,将只需要进行一次初始化的操作放在 static 代码块。

4.类中含多个静态代码块,Java虚拟机将按它们在类中出现的顺序依次执行,且都执行一次。

5.同静态代码块与静态,不能直接访问类的实例变量和实例方法,需通过类的对象访问(new一个对象)。

    public HashSet(Collection<? extends E> c) {map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));addAll(c);}

运行结果

false
trueProcess finished with exit code 0

Leetcode-数据结构-217. 存在重复元素相关推荐

  1. LeetCode Algorithm 217. 存在重复元素

    217. 存在重复元素 Ideas 对于C++来说,先用std的sort对数组排个序,然后遍历数组,如果第i位和第i+1位相等,说明数组中存在重复元素. 对于Python来说,用set创建一个集合,然 ...

  2. 217. 存在重复元素

    217. 存在重复元素 给定一个整数数组,判断是否存在重复元素. 如果任意一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 false . 示例 1: 输入: [1, ...

  3. LeetCode 217. 存在重复元素(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: ...

  4. Leetcode 217. 存在重复元素 (每日一题 20210913)

    给定一个整数数组,判断是否存在重复元素.如果存在一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 false .示例 1:输入: [1,2,3,1] 输出: true ...

  5. Leetcode题库217.存在重复元素(python实现)

    文章目录 思路 代码 思路 1.采用set的性质(无重复元素)解题 2.hash数组 3.字典 4.暴力for循环(小心超时) 代码 class Solution:def containsDuplic ...

  6. leetcode[217].存在重复元素

    给定一个整数数组,判断是否存在重复元素. 如果存在一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 false . 示例 1: 输入: [1,2,3,1] 输出: t ...

  7. LeetCode实战:存在重复元素

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given an ar ...

  8. LeetCode Permutations II(有重复元素的全排列)

    问题:给出一个有重复元素的数组,要求输出全排列 思路:先排序,然后使用next_permutation 具体代码参考: https://github.com/wuli2496/OJ/tree/mast ...

  9. 力扣217.存在重复元素 使用多种方法

    题目描述 给定一个整数数组,判断是否存在重复元素. 如果存在一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 false . 示例 示例 1: 输入: [1,2,3, ...

  10. 力扣题目——217. 存在重复元素

    注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数 题目描述 给定一个整数数组,判断是否存在重复元素. 如果存在一值在数组中出现至少两次,函数返回 true ...

最新文章

  1. js颜色选择器 制作分析
  2. Linux内存管理之高端内存映射
  3. mysql not in语句_Mysql学习经验总结【2】
  4. CodeForces - 1485F Copy or Prefix Sum(dp)
  5. 没事写着玩 系列之 JQ连连看(很丑陋,很初级)
  6. 电脑内部录音教程Virtual Audio Cable使用教程
  7. ECCV18|这篇论文开源的车牌识别系统打败了目前最先进的商业软件(附Github地址)...
  8. td外边加div为啥不隐藏_那些不常见,但却非常实用的 css 属性
  9. 【系统架构】小型电商网站的架构(一)
  10. 力扣算法题—069x的平方根
  11. linux谷歌浏览器无法登陆,新版CentOS 7.1上的谷歌浏览器无法启动
  12. Zookeeper下载与安装教程(for windows)
  13. 点击换图 秀米的svg_能换色的.svg图片怎么用?看这篇就够了!
  14. java的handler机制_从源码解析Handler机制
  15. w7系统里没有iis信息服务器,win7系统控制面板的管理选项没有“internet信息服务(IIS)管理器”的解决方法...
  16. PHP抓取淘宝店铺等级、评分
  17. 基于MATLAB的车牌识别基本原理及算法讲解
  18. 欧奈尔RPS曲线的编制方法及常见问题解答
  19. 华为 eNSP启动设备AR1失败 错误代码40
  20. css精华怎么使用,css橄榄精华好用吗?css橄榄精华评测

热门文章

  1. Dubbo NoSuchMethodException: Not found method “xxx“ in class xxx问题解决
  2. 《成语接龙》隐私说明
  3. 怎么去掉视频上的水印?快速去除水印或字幕的大神技巧
  4. PMP-商业论证中的财务测量指标-动态投资回收期、净现值、内部收益率、效益成本率计算
  5. PCB中贴片元件封装焊盘尺寸的规范
  6. 加载、编辑和保存Wod格式所见所得的Word文档处理控件TX Text Control ActiveX
  7. 大智慧财汇数据库l2接口的核心是什么?
  8. 集合的简单实现(斗地主牌的实现 )
  9. MQTT之十一 阿里云物联网平台网址
  10. 谷歌滤镜软件叫什么_谷歌app爆红的拍照功能:你最像名画中的谁?