✨个人主页: 不漫游-CSDN博客
什么是HashMap和HashSet?
HashMap:
HashMap就像一个字典,你可以找到键(key)对应的值(value)。想象一本字典,你查找某个单词(键),就能找到它的解释(值)。HashMap提供了快速查找并存储键值对的功能,就像字典一样帮助我们快速找到需要的信息。
HashSet:
HashSet就像一个装满不重复物品的盒子。在这个盒子里,每个物品都是独一无二的,不会重复。当你需要快速判断某个物品是否在盒子里时,HashSet能够在很快的时间内告诉你答案,因为它内部使用了哈希表这种特殊的组织方式来确保物品的唯一性和快速查找。所以,HashSet适合用于存储一些互不相同的元素,并且需要经常检查是否存在某个元素的情况。
对于他们的运用
只出现一次的数字
思路总结:这道题可以利用set的不重复性来做,把去重的元素放入set中,然后在遍历的过程中,去比较数组中有没有和set中元素一致的数,最后set中存储的就是那只出现一次的数
class Solution {
public int singleNumber(int[] nums) {
HashSet<Integer> set=new HashSet<>();
for (int i = 0; i <nums.length ; i++) {
if (!set.contains(nums[i])){
set.add(nums[i]);
}else{
set.remove(nums[i]);
}
}
//不能直接返回set的值,因此要再遍历一次
for (int i = 0; i <nums.length ; i++) {
if(set.contains(nums[i])){
return nums[i];
}
}
return -1;
}
}
随机链表的复制
思路总结:要复制的有三个value值,next的指向,random的指向,但题目要求是深拷贝,所以这道题可以采用Map中一一对应的关系来做,
class Solution {
public Node copyRandomList(Node head) {
Node cur=head;
HashMap<Node,Node> map=new HashMap<>();
//第一次遍历
while(cur!=null){
Node node=new Node(cur.val);
map.put(cur,node);
cur=cur.next;
}
//第二次遍历
cur=head;
while(cur!=null){
map.get(cur).next=map.get(cur.next);
map.get(cur).random=map.get(cur.random);
cur=cur.next;
}
return map.get(head);
}
}
在第一次遍历的过程中,首先是复制val值,建立映射关系,在第二次的遍历中,cur重新回到head,并且建立next和random的映射,将第一个与第二个进行连接,以此类推~
看到最后,如果觉得文章写得还不错,希望可以给我点个小小的赞,您的支持是我更新的最大动力