判断存在重复元素
存在重复元素
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
相关标签
数组
哈希表
排序
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x248f5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public boolean containsDuplicate(int[] nums) {
// 获取长度,排除长度小于等于1
int length = nums.length;
if(length <= 1) {
return false;
}
// 定义 hash 表
int[] hashArr = new int[length];
// 0 比较特殊,定义变量专门记 0
int count0 = 0;
// 循环存入 hash 表(除余hash算法)
for(int i = 0; i < length; i++) {
// 记 0
if(nums[i] == 0) {
count0++;
if(count0 > 1) {
return true;
}
continue; // 不存入 hash 表,直接进入下一循环
}
// 除余
int yu = nums[i] % length;
// 余为负数处理
if(yu < 0) {
yu += length;
}
// hash 判断
// 判断该位置是否有数
if(hashArr[yu] == 0) {
// 无数则存入
hashArr[yu] = nums[i];
break;
} else if (hashArr[yu] == nums[i]) {
// 有数且相等
return true;
} else {
// 有数且不相等,存入后一位,以此类推
yu++;
if(yu >= length) {
yu -= length;
}
}
}
return false;
}
}