持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
每日力扣是一个专门用来讲力扣中国每天发布的每日一题的栏目。本专栏不提供题目的解答源码,只讲解思路,目的是养成每日刷题、提高自己手感,从而达到算法熟练的目标。
题目(已做删减处理)
给定链表头结点 head,该链表上的每个结点都有一个 唯一的整型值 。同时给定列表 nums,该列表是上述链表中整型值的一个子集。返回列表 nums 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 nums 中)构成的集合
分析
一道简单的模拟题目。我们可以很容易的从题目中提取到关键点。因为要计算组件的个数,那么就要先确定组件是否是起始点(如果是起始点的话,说明可以成为组件,想反的,则是组件元素或者无效数据)。 我们判断一个组件是否是链表中的起始位置,可以有2种情况:
- 节点中的数值,位于nums中,而且位于链表的起始位置(即链表的头结点);
- 节点中的数值,位于nums中,但是节点的前一个节点不在 nums 中。 按照上面的两种情况,我们通过遍历节点,就可以获得有几个组件是位于链表中的起始点,最后返回这个组件的总和即可。
总结
一道特别简单的模拟算法题,没有弯弯绕绕,而且虽然包含了链表元素,但其实最重要的还是数组的判定和逻辑处理。我认为力扣之所以将其评估为mid难度的类型的算法,最重要的还是题目的描述太过模糊,提供的示例也没有很好的展示出算法的要求。这倒算法题比较新,很有可能是力扣翻译的时候不能够完整表达题目要说明的逻辑。因此如果你英语还不错,最好还是直接看主站的描述吧。