LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array)
这是悦乐书的第365次更新,第393篇原创
01 看题和准备
今天介绍的是LeetCode
算法题中Easy
级别的第227
题(顺位题号是961
)。在大小为2N
的数组A
中,存在N+1
个唯一元素,并且这些元素中的一个重复N
次。
返回重复N次的元素。例如:
输入:[1,2,3,3]
输出:3
输入:[2,1,2,5,3,2]
输出:2
输入:[5,1,5,2,5,3,5,4]
输出:5
注意:
4 <= A.length <= 10000
0 <= A [i] <10000
A.length是偶数
02 第一种解法
题目的意思是找数组A
中出现了N/2
次的数,其中N
为数组A
的长度。使用HashMap
,key
为数组元素,value
为其出现次数,先将A
中的元素初始化进HashMap
中,然后遍历HashMap
,找到value
等于N/2
的key
返回即可。
public int repeatedNTimes(int[] A) {Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int n : A) {map.put(n, map.getOrDefault(n, 0)+1);}int half = A.length/2;for (Integer key : map.keySet()) {if (map.get(key) == half) {return key;}}return -1;
}
03 第二种解法
同样是先记数再查找的思路,将第一种解法的HashMap
换成int
数组,长度为10001,新数组count的索引为A
中的元素,值为A
中元素的出现次数,然后遍历count
数组,返回其中值等于N/2
的索引,N
为数组A
的长度。
public int repeatedNTimes2(int[] A) {int[] count = new int[10001];for (int n : A) {count[n]++;}int half = A.length/2;for (int i=0; i<count.length; i++) {if (count[i] == half) {return i;}}return -1;
}
04 第三种解法
换一种角度来看,把数组中的重复元素找到就行,而去重首选HashSet
,遍历A
中的元素,如果HashSet
中已经存在当前元素,即此元素就是要找的多次出现的元素。
public int repeatedNTimes3(int[] A) {Set<Integer> set = new HashSet<Integer>();for (int n : A) {if (set.contains(n)) {return n;} else {set.add(n);}}return -1;
}
05 第四种解法
和第三种解法的思路相同,只是将HashSet
换成了int
数组。
public int repeatedNTimes4(int[] A) {int[] count = new int[10001];for (int n : A) {if(++count[n] >= 2) {return n;}}return -1;
}
06 第五种解法
在第四种解法的基础上,做进一步简化,使用字符串代替。新建一个字符串str,如果当前元素没有出现过在str中,就拼接到str上,反之就是str中已经存在了该元素,返回该元素即可。
public int repeatedNTimes5(int[] A) {String str = "";for (int n : A) {if (str.indexOf(n+"") < 0) {str += n;} else {return n;}}return -1;
}
07 第六种解法
直接使用两层循环,匹配相等的元素。
public int repeatedNTimes6(int[] A) {int n = A.length;for (int i=0; i<n; i++) {for (int j=i+1; j<n; j++) {if (A[i] == A[j]) {return A[i];}}}return -1;
}
08 第七种解法
此解法来自LeetCode
给的参答,这个思路很奇妙,算是在第六种解法基础上的进一步简化。
同样使用两层循环,但是不像第六种解法那样每次都是比较相邻的元素,而是分3次跳着比较,第一次是比较相邻元素,第二次是比较间隔1位的元素,第三次是比较间隔2位的元素,将A切分成4个长度为一组的子数组,将其中的元素与其距离1、2、3的元素做比较,至少会存在一个重复元素在其中。
public int repeatedNTimes7(int[] A) {int n = A.length;for (int i=1; i<=3; i++) {for (int j=0; j<n-i; j++) {if (A[j] == A[j+i]) {return A[i];}}}return -1;
}
09 小结
算法专题目前已连续日更超过七个月,算法题文章233+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
转载于:https://www.cnblogs.com/xiaochuan94/p/11094905.html
LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array)相关推荐
- es6去除重复项_javascript在ES6中从数组中筛选出重复项并仅返回唯一值
这是从数组中筛选出重复项并仅返回唯一值的三种方法.我最喜欢的是使用Set,因为它是最短和最简单的. 1.使用Set 首先让我解释一下Set:Set是ES6中引入的新数据对象.因为Set仅允许您存储唯一 ...
- 【宫水三叶的刷题日记】961. 在长度 2N 的数组中找出重复 N 次的元素
题目描述 这是 LeetCode 上的 961. 在长度 2N 的数组中找出重复 N 次的元素 ,难度为 简单. Tag : 「模拟」.「计数」.「构造」.「哈希表」 给你一个整数数组 nums ,该 ...
- LeetCode删除排序数组中的重复项(Java实现)
原题: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件 ...
- Leetcode刷题100天(阿里云周赛)—查找数组中的所有重复项(哈希)—day42
前言: 作者:神的孩子在歌唱 大家好,我叫运智 描述 给定一个整数数组,1 ≤ a[i] ≤ n(n = 数组的大小),一些元素出现两次,其他元素出现一次. 找到在此数组中出现两次的所有元素. 示例 ...
- LeetCode 961 N-Repeated Element in Size 2N Array --python,java解法
题目地址:N-Repeated Element in Size 2N Array - LeetCode Acceptance:73.3% Difficulty:Easy In a array A of ...
- Java面试题:在一个递增的数组里面,找出任意两个数的和等于100,编写程序输出这些数对,可以假设数组中不存在重复元素
本文使用两种算法来实现,分别是二分查找法和插值查找法,发现插值查找法更好,更快地找到需要的数据. 代码如下: package com.moson.search;import java.util.Arr ...
- 每天一道LeetCode-----有序数组循环右移n位后,寻找最小值,数组中可能包含重复元素
Find Minimum in Rotated Sorted Array II 原题链接Find Minimum in Rotated Sorted Array II 一个有序数组循环右移n位,找到右 ...
- LeetCode 1707. 与数组中元素的最大异或值(Trie树)
文章目录 1. 题目 2. 解题 1. 题目 给你一个由非负整数组成的数组 nums .另有一个查询数组 queries ,其中 queries[i] = [xi, mi] . 第 i 个查询的答案是 ...
- LeetCode 1095. 山脉数组中查找目标值(二分查找)
1. 题目 给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值. 如果不存在这样的下标 ind ...
最新文章
- linux驱动:i2c驱动(三)流程图之注册设备
- 【Linux】一步一步学Linux——visudo命令(104)
- android 属性动画伸缩,Android的属性动画(二)加载框圆点旋转收缩放大缩小效果的实现...
- [vue] 说说你觉得认为的vue开发规范有哪些?
- oracle中DECODE与CASE的用法区别
- 在计算机中dos代表什么意思,Boot是什么意思
- MySQL数据库知识点总结
- Python给指定文件打上数字签名
- python编程软件哪个好-Python开发工具哪个好?好用的Python开发工具排行榜推荐下载...
- linux中指令简约版
- openwrt下ipk生成过程及原理
- python爬虫利用requests和BeautifulSoup爬取美女图片
- hive hql 交差并集 练习
- win7系统怎么进行网络重置?
- 内存中的存储空间(栈空间、堆空间、数据段、代码段)
- 了解java中暴力反射
- 解决Linux“Device is busy”与磁盘只读
- Numbers 储存格换行、表格自动换列
- Java8--20道关于Stream流的题目练习
- echarts图表宽度为百分比出现的问题
热门文章
- [转]sqlserver2008锁表语句详解
- c++ 通过 myodbc连接到 远程linux 上的mysql server
- 各品牌笔记本BIOS设置硬盘为兼容模式(IDE)方法
- 获取init程序的调试信息和uevent的调试信息需要打开的两个宏
- 简单CSS3动画制作
- JavaScript核心参考手册.chm
- Android-实现切换Fragment页功能
- Oracle 11 密码永不过期
- 判断一个jquery对象是否为空jquery对象
- Python(2.7.6) 列表推导式