通过万岁!!!
- 题目:这个题我读起来其实有点绕,大致意思就是给你一个数组,然后这个数组是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;
}
}
- 总结:题目虽然是中等难度,但是其实不难。整个过程其实也是一个模拟的过程。