LeetCode——817.链表组件

通过万岁!!!

  • 题目:这个题我读起来其实有点绕,大致意思就是给你一个数组,然后这个数组是list的子集。然后将list进行分组,看看能分成几组,而分组的条件就是list的元素不在数组中的时候,就切分。
  • 思路:这里肯定是需要用set集合存储数组的元素,这样就不用每次都遍历数组看包不包含。如果之前的元素包含,然后现在不包含了,那么分组数就需要加1了。因此需要先定义一个变量,用来记录之前是不是包含,然后每次不包含的时候,都需要对这个变量的状态进行修改。最后如果还是包含的话,那么最终的值需要再加1。
  • 技巧:数组遍历、哈希

java代码

class Solution {
    public int numComponents(ListNode head, int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int i : nums) {
            set.add(i);
        }
        int ans = 0;
        boolean contain = false;// 记录包含的个数
        // 包含,然后不包含,就+1
        while (head != null) {
            if (!set.contains(head.val)) {// 当前不包含
                if (contain) {// 之前包含
                    ans++;
                    contain = false;
                }
            } else {
                contain = true;
            }
            head = head.next;
        }
        // 最后还有包含的
        if (contain) {
            return ans + 1;
        }
        return ans;
    }
}
  • 总结:题目虽然是中等难度,但是其实不难。整个过程其实也是一个模拟的过程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值