【set】个人练习-Leetcode-817. Linked List Components

题目链接:https://leetcode.cn/problems/linked-list-components/description/

题目大意:给出一个vector<int> nums,其中有一些数字。再给出一个链表的头指针head,链表内的元素各不相同。如果链表中有某一段(长度大于等于1)的元素都在nums中出现过,那么就算一个component,求链表中的component的个数。

思路:【判断是否在nums中出现过】直接用set就好了,如果是STL的话,用count方法很方便。不过测试了一下后发现时间花得有点多,于是换成了数组。

使用两个布尔值:last表示【上一个元素】【是否在nums中出现过】,用flag表示【当前元素】【是否在nums中出现过】

  • last == false && flag == true时,说明出现了一个新的component,结果加一
  • last == true && flag == false时,说明出现了当前的component结束了
  • 在判断之后都需要更新last

完整代码

cpp 复制代码
class Solution {
public:
    int numComponents(ListNode* head, vector<int>& nums) {
        bool nm[10001] = {0};
        for (auto x : nums) {
            nm[x] = true;
        }

        ListNode* ptr = head;
        bool last = false;
        int ret = 0;
        
        while (ptr) {
            bool flag = nm[ptr->val];

            if (flag != last) {
                if (last) {
                    last = false;
                }
                else {
                    ret++;
                    last = true;
                }
            }
            ptr = ptr->next;
        }

        return ret;
    }
};
相关推荐
Liangwei Lin1 分钟前
LeetCode 48. 旋转图像
算法
AGV算法笔记6 分钟前
【具身智能研究进展】RoboBrain 2.5:让机器人真正理解“空间”和“时间”的大脑模型
算法·3d·机器人·具身智能·感知算法
love在水一方11 分钟前
【InternNav】 工程详细分析
人工智能·算法·机器学习
合兴软件@36 分钟前
合兴软件重磅推出高性能HSM固件 国密算法赋能汽车信息安全新防线
网络·算法·网络安全·汽车·信息与通信
wearegogog1231 小时前
基于遗传算法的阵列天线方向图优化MATLAB实现
算法·matlab
Controller-Inversion1 小时前
312. 戳气球
算法
图码1 小时前
最大子数组和问题:从暴力到Kadane算法的优雅蜕变
数据结构·算法·动态规划·柔性数组
Raink老师1 小时前
用100道题拿下你的算法面试(链表篇-5):删除链表的倒数第 N 个节点
算法·链表·面试
qq_296553271 小时前
[特殊字符] 数组中的递增三元组:O(n) 时间高效查找,面试必考!
数据结构·算法·面试·职场和发展·组合模式·柔性数组
逻辑驱动的ken1 小时前
Java高频面试考点场景题26
java·开发语言·面试·职场和发展·求职招聘