前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode108|数组中重复的数字

LeetCode108|数组中重复的数字

作者头像
码农王同学
发布于 2020-10-27 10:13:05
发布于 2020-10-27 10:13:05
54500
代码可运行
举报
文章被收录于专栏:后端Coder后端Coder
运行总次数:0
代码可运行

0x01,问题简述

找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

0x02,示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例 1:

输入:
[2, 3, 1, 0, 2, 5, 3]
输出:23 
 

限制:

2 <= n <= 100000

0x03,题解思路

这里给出两种解决方式,一个是使用键值对集合HashMap进行解决,一个使用数组的方式进行解决

0x04,题解程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

import java.util.Arrays;
import java.util.HashMap;

public class FindRepeatNumberTest2 {
    public static void main(String[] args) {
        int[] nums = {2, 3, 1, 0, 2, 5, 3};
        int repeatNumber = findRepeatNumber2(nums);
        System.out.println("repeatNumber = " + repeatNumber);
    }

    public static int findRepeatNumber(int[] nums) {
        if (nums == null || nums.length == 0) {
            return -1;
        }
        HashMap<Integer, Integer> hashMap = new HashMap<>(nums.length);
        for (int num : nums
        ) {
            hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
        }
        return hashMap.entrySet().stream().filter(x -> x.getValue() > 1).findFirst().get().getKey();
    }

    public static int findRepeatNumber2(int[] nums) {
        if (nums == null || nums.length == 0) {
            return -1;
        }
        Arrays.sort(nums);
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i - 1]) {
                return nums[i];
            }
        }
        return -1;
    }
}

0x05,题解程序图片版

0x06,总结一下

其实,每次题解做完之后,总结性的话就变得很少了,我倒是觉得程序完全就体现了整个内容,过多的注释性说明真的那么重要吗,对于输出者而言就是一种简单的描述而已,或许对于读者而言就是很好的内容说明吧

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode84|只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
码农王同学
2020/10/14
4380
LeetCode40|有序数组中的单一元素
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
码农王同学
2020/08/25
2830
LeetCode40|有序数组中的单一元素
LeetCode86|只出现一次的数字II
最近这三题的相似程度都很像,所以除了第一题给出了两种解法之外,对于另外的两个题,自己目前还是以比较熟练的键值对hashMap来做了,但是后续有时间的话,自己在慢慢把这块说下吧,这里就暂时不说了。
码农王同学
2020/10/14
2510
LeetCode85|只出现一次的数字III
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。
码农王同学
2020/10/14
3130
LeetCode52|有序数组中的单一元素
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
码农王同学
2020/09/21
2950
LeetCode52|有序数组中的单一元素
LeetCode49|搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
码农王同学
2020/09/10
2970
LeetCode72|前K个高频元素
hashMap键值对集合加上堆排序的使用,也算是堆,即优先级队列的使用吧,一般自己的写法都是很常规的写法,所以看懂java语法就知道怎么个意思了。
码农王同学
2020/10/14
3950
LeetCode95|字符串中的第一个唯一字符
本题使用键值对集合LinkedHashMap进行解决,使用LinkedHashMap的好处是因为链表的有序性,这样就可以找到第一个不重复的字符了,使用HashMap的就未必可以达到这个要求,懂得合理使用数据结构去解决问题也是一种方式把吧
码农王同学
2020/10/10
4420
LeetCode95|字符串中的第一个唯一字符
LeetCode32|前k个高频元素
6,键值对集合的使用,这里自己也曾经分析过java集合的源码,具体见下面的链接吧,但是自己从未去写过hashMap的源码,因为网络上这样的文章的太多了,自己倒是分析过HashSet的源码java进阶|HashSet的源码分析,HashSet是基于HashMap的基础上实现的,自己也分过HashMap的源码文章,但是从没有去写一篇文章
码农王同学
2020/08/25
3070
LeetCode32|前k个高频元素
LeetCode122|删除排序链表中的重复元素II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
码农王同学
2020/10/27
3150
LeetCode21|主要元素
这道题采用键值对集合的进行解决还是很常见的一种思路,算法题一直是自己喜欢的题,但是上学的时候自己javaAPI都不是很熟悉的我自然而然不会做这样的题,现在看现在的博客账号都开通好几年了,但是文章却一直没有发过,一直在吸收技术的路上,没有时间去输出,自从去年10月份时觉得有必要输出一些自己的东西了,才慢慢做到了今天,写这类题主要是为了磨平曾经自己缺少的技术,毕竟会总比不会要好一些,但是作用不是很大,主要看自己是否喜欢来了
码农王同学
2020/08/25
2280
LeetCode21|主要元素
LeetCode43|最大层内元素和
给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
码农王同学
2020/08/25
3340
LeetCode43|最大层内元素和
LeetCode113|两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
码农王同学
2020/10/27
2980
剑指offer之找出数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
周杰伦本人
2022/10/25
2980
LeetCode111|独一无二的出现次数
键值对HashMap的重要性真的是不言而喻的,因为它应用的太广泛了,可以说基本上你做应用就是使用它,和ArrayList的次数相差不大,所以你现在如果不懂的话,可以查阅资料了解一下了
码农王同学
2020/10/27
3950
LeetCode91|寻找重复数
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
码农王同学
2020/10/14
2890
LeetCode33|寻找重复数
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
码农王同学
2020/08/25
3010
LeetCode33|寻找重复数
LeetCode154|删除排序数组中的重复项II
给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。
码农王同学
2021/01/15
4740
LeetCode137|求众数II
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
码农王同学
2020/11/26
5670
剑指offer|03. 数组中重复的数字
借助Set,如果add方法返回false,则意味着有数据重复。或者使用contains方法,判断是否已有数据存在,如有则意味着该数据重复。
孟君
2023/02/23
2180
剑指offer|03. 数组中重复的数字
相关推荐
LeetCode84|只出现一次的数字
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验