算法篇:集合Set
文章目录
217.存在重复元素
同哈希表篇
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;
}
}
705.设计哈希集合
思路:
哈希函数:使用key % 769
冲突策略:使用单独链表法
class MyHashSet {
//哈希表的长度 也是桶的个数
private int max;
//一个存储所有桶的数组
private Bucket[] bucketArray;
//初始化
public MyHashSet() {
max = 769;
bucketArray = new Bucket[max];
//初始化每个桶
for(int i = 0; i < max;i++){
bucketArray[i] = new Bucket();
}
}
//哈希函数
public int _hash(int key){
return key % max;
}
//向哈希集合中插入key
public void add(int key) {
int index = _hash(key);
bucketArray[index].add(key);
}
public void remove(int key) {
int index = _hash(key);
bucketArray[index].remove(key);
}
/** Returns true if this set contains the specified element */
public boolean contains(int key) {
int index = _hash(key);
return bucketArray[index].contains(key);
}
}
class Bucket {
//一个桶是由链表构成的
private LinkedList<Integer> container;
public Bucket(){
//初始化链表
container = new LinkedList<Integer>();
}
//在桶中插入一个元素 重复的不再插入
public void add(Integer key){
if(!container.contains(key)){ //此元素还不存在 插入
container.addFirst(key);
}
}
//删除桶中元素
public void remove(Integer key){
container.remove(key);
}
//检查桶中是否有这个元素
public boolean contains(Integer key){
return container.contains(key);
}
}