HashMap与HashSet(随记)

9 篇文章 0 订阅
HashMapHashSet
实现了Map接口实现了Set接口
存储键值对仅存储对象
调用put()方法向map中添加元素调add()方法向set中添加元素
HashMap使用键(Key)计算HashcodeHashSet使用成员对象计算Hashcode值

之后再次遇到再补充细节


1 . 找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。
数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
限制:2 <= n <= 100000

class Solution{
    public int findRepeatNumber(int[] nums){
        Set<Integer> set = new HashSet<>();
        for(int i : nums){
            if(set.contains(i)){
                return i;
            }else{
                set.add(i);
            }
        }
        return -1;
    }
}

注:
出现InputMismatchException异常是输入不匹配,即输入的值数据类型与设置的值数据类型不匹配。
ArrayIndexOutOfBoundsException异常:超出界限异常,即越界。

//或者这种方法
class Solution {
    public int findRepeatNumber(int[] nums) {
        int[] arr = new int[nums.length];
        for(int i = 0; i < nums.length; i++){
            arr[nums[i]]++;
            if(arr[nums[i]] > 1)
            return nums[i];
        }
        return -1;
    }
}

2 . 两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共节点。
在这里插入图片描述

我走过你走过的路,你走过我走过的路,我们就相遇了。
这大概就是程序员的浪漫~

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        Set<ListNode> set = new HashSet<ListNode>();
        ListNode tmp = headA;
        while(tmp != null){
            set.add(tmp);
            tmp = tmp.next;
        } 
        tmp = headB;
        while(tmp != null){
            if(set.contains(tmp)){
                return tmp;
            }
            tmp = tmp.next;
        }
        return null;
    }
}
//或者这种办法
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode A = headA, B = headB;
        while(A != B){
            A = A != null ? A.next : headB;
            B = B != null ? B.next : headA;
        }
        return B;
    }
}

关于三元运算符(即上述方法中的问号与冒号)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值