一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情。
今天是周五,上线了一版做了许久的区块链溯源工程,还是颇为满意的,至少稳定运行没有bug
存在重复数组
该题出自力扣的217题 —— 存在重复数组【简单题】,我愿称这题是我最快做完的
审题
给你一个整数数组
nums。如果任一值在数组中出现 至少两次 ,返回true;如果数组中每个元素互不相同,返回false。
输入: nums = [1,2,3,1]
输出: true
- 题意没什么好说的,相当简单,给出一个整型数组,如果数组内有值出现次数超过两次,则返回true,如果数组内每一个元素都互不相同,则返回false;
- 判断数组内每个元素都不相同,很麻烦;但是判断数组内是否存在一个数超过两次则相对很简单
- 解法很多,虽然是简单题,反而更需要举一反三
- 解法一: 利用额外的空间去存储数组,并且借助空间返回
- 利用Set去实现,Set具有元素唯一的特性
- 如果Set.add方法返回false,则表示已经加入过一次了,可以直接返回true
- 遍历到最后直接返回false
- 解法二:利用Arrays.sort方法
- 利用sort方法对数组进行排序
- 并且遍历数组,如果数组的前一位数据与下一位数组相同,则可以直接返回true
- 遍历到最后直接返回false
- 解法三:利用数量侧面对比
- 直接对数组进行stream.distinct.count方法,也就是查重后获取数量
- 如果最终数量 != 数组原数量,则代表有重复数据,返回true
- 反之返回fasle
- 解法一: 利用额外的空间去存储数组,并且借助空间返回
编码
- 利用Set数据结构实现
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
for (int x : nums) {
if (!set.add(x)) {
return true;
}
}
return false;
}
}
- 利用Arrays.sort
public boolean containsDuplicate(int[] name){
Arrays.sort(name);
int n = nums.length;
for(int i =0;i<n-1;i++){
if(nums[i] == nums[i+1])return true;
}
return false;
}
class Solution {
public boolean containsDuplicate(int[] nums) {
return Arrays.stream(nums).distinct().count() < nums.length?true:false;
}
}