题目:

给你一个整数数组 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)
链接:https://leetcode.cn/problems/contains-duplicate
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

一、sort排序

先将数组中的所有数进行排序,这样相等的数字就会相邻,直接判断相邻的数字是否相等,相等返回true,不等返回false。

java代码:

 1 class Solution {
2 public boolean containsDuplicate(int[] nums) {
3 Arrays.sort(nums);
4 int n = nums.length;
5 for(int i = 1; i < n; i++){
6 if(nums[i] == nums[i-1]){
7 return true;
8 }
9 }
10 return false;
11 }
12 }

 python3代码:

1 class Solution:
2 def containsDuplicate(self, nums: List[int]) -> bool:
3 nums.sort()
4 for i in range(len(nums)-1):
5 if nums[i] == nums[i+1]:
6 return True
7 return False

 二、HashSet

将数组中的元素插入到哈希表中,如果插入一个元素时,发现该元素已经存在于哈希表中,说明该元素重复,返回true。遍历结束,都没遇到重复元素,则返回false。

java代码:

 1 class Solution {
2 public boolean containsDuplicate(int[] nums) {
3 HashSet<Integer> hashset = new HashSet<>();
4 for(int num : nums){
5 if(hashset.contains(num)){
6 return true;
7 }
8 hashset.add(num);
9 }
10 return false;
11 }
12 }

python3代码:

1 class Solution:
2 def containsDuplicate(self, nums: List[int]) -> bool:
3 # 相等说明无重复元素,返回false(题中说了有重复返回true)
4 return not len(set(nums)) == len(nums)

小知识:

一、java中HashSet的使用
1 . HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。

2 . HashSet 允许有 null 值。

3 . HashSet 是无序的,即不会记录插入的顺序。

4 . HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。

5 . HashSet 实现了 Set 接口。

6 . HashSet 的初始化定义:

HashSet<String> sites = new HashSet<String>();

引用类型可以有:

7. 常用的方法:

  • contains() 方法:来判断元素是否存在于集合当中;
  • add() 方法:向集合中添加元素;
  • remove() 方法:删除集合中的元素;
  • clear方法:删除集合中所有元素;
  • size()方法:计算HashSet中的元素数量;
  • 使用for-each来迭代HashSet中的元素

 二、python中集合的使用

1.set集合是python的一个基本数据类型,set中的元素是不重复的,无序的,里面的元素必须是可哈希的,不可变的(int,str,tuple,bool),相当于set就是dict类型的数据但是不保存value,只保存key。

创建集合:可以用{}或set()创建集合,但是创建空集合必须用set(),因为{}创建的是空字典。

2.常用方法:

  • 增加数据:集合名.add(数据)     # 因为集合自动去重复,如果添加是重复内容不会进行任何操作
  • 追加数据序列:集合名.update(数据序列)   #数据序列可以是元组、列表、字符串

  • 删除:

    集合名.remove(数据) #如果数据不存在,报错

    集合名.discard(数据) # 数据不存在,不报错

     集合名.pop()    # 随机删除集合中某个数据,并返回这个数据

  • 查找数据:(注意:set没有位置,不能利用索引来查找)

    in : 判断数据是否在集合序列中     print( 数据 in 集合名 ) # 返回 True 或 False

    not in: 判断集合不在集合序列中    print( 数据 not in 集合名 ) # 返回 True 或 False

力扣217(java&python)-存在重复元素(简单)的更多相关文章

  1. [LeetCode] 217. Contains Duplicate 包含重复元素

    Given an array of integers, find if the array contains any duplicates. Your function should return t ...

  2. python 去掉重复元素 学到再添加

    1. python 内置函数 set(可迭代对象) 返回无重复元素的集合.如在分类中,classification为类别数组 set(classification)为类别数 2.numpy np.un ...

  3. java去除数组重复元素的方法

    转载自:https://blog.csdn.net/Solar24/article/details/78672500 import java.util.ArrayList; import java.u ...

  4. Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置

    面试题查找重复元素并打印重复次数和重复位置,一顿懵逼,回来死磕写下来,打印指定重复次数和最大次数,其他在此基础上可以再更新 package sort; import org.testng.annota ...

  5. [LeetCode]-217.存在重复元素-简单

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

  6. python(leetcode)-重复元素算法题

    leetcode初级算法 问题描述 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 该问题表述非常简单 ...

  7. 力扣561. 数组拆分 I-C语言实现-简单题

    题目 传送门 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(a ...

  8. 力扣566. 重塑矩阵-C语言实现-简单题

    题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...

  9. 力扣832. 翻转图像-C语言实现-简单题

    题目 传送门 文本 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...

  10. 力扣896. 单调数列-C语言实现-简单题

    题目 传送门 文本 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j, ...

随机推荐

  1. python的软连接的操作方法

    详细:切换python的版本 cd /usr/bin/ ls -l python* sudo rm -rf python sudo ln -s /usr/bin/python3.7 /usr/bin/ ...

  2. ESP8266 SPI 开发之软件驱动代码分析

    一 基本概述 esp8266的SPI代码流程非常的清晰,主要有三部分构成: spi_init 配置 spi_trans 配置 data_transfer 配置这三块组成. 在这里,笔者就针对spi的这 ...

  3. Oracle数据库中sql查询很快,但在程序中查询较慢的原因和解决方法

    代码如下 string sql = "SELECT * FROM LIS_V_LABTESTSAMPLE WHERE PATIENT_ID=:P";            HlsA ...

  4. [置顶] 彻底停止运行线程池ThreadPoolExecutor

    最近系统开发时遇到这样一个需求: 该功能执行时间很久,如果运行过程出现错误,也无法将其停止,必须眼睁睁的看着它浪费很久时间,除非停止服务器. 于是,我就想着如何给该功能加上一个"停止&quo ...

  5. 大端(big endian) 小端(little endian) --- 在多字节存储 和 多字节通信中的含义(我还是太年轻了)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  6. HISI3520DV300 折腾记录(三)之《终篇》

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  7. Java中一个逐渐被遗忘的强大功能,强到你难以置信!!

    大家好,我是冰河~~ 说起Java,简单好用,但是Java中很多牛逼的技术却逐渐被遗忘了~~ 在Java语言出现之前,很多系统都是使用C和C++开发的.Java出现之后,由于其面向对象的思想更加符合人 ...

  8. ChatGPT写作提示词指令大全

    1 .用ChatGPT写影评 指令:你是一个自媒体人,同时也是一个专业的影评人.最近熬夜看完了韩剧黑暗荣耀第一季和第二季,忍不住想在公众号分享给粉丝们,请写一篇1000字左右的自媒体文章,并且加上一个 ...

  9. zynq之TF卡写入函数f_printf

    zynq之TF卡写入函数f_printf 1.基本原理 前面使用f_write写入了数据到TF(SD)卡中,可以实现较短字符串的写入.当字符增加时,容易出现乱码.而f_printf则是专门用于字符串写 ...

  10. KingbaseES V8R6 集群中复制槽非活跃状态的可能原因

    背景 此问题环境是一主五备物理集群,其中node1是主节点,node2,3是集群同步节点,node4,5是集群异地异步节点,由于异地和主节点不同网段,网速非常慢. kdts-plus工具纯迁数据,每分 ...