每日一练 —— set习题

1. 两个数组的交集

题目链接:349. 两个数组的交集 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/intersection-of-two-arrays/description/

这题使用set,因为set具有排序和去重的特性

    

思路:

        1.两个值相等就是交集

        2.小的那个值++,因为是小的那个值,那么后面就一定不会有这个值,那么小的一定不是交集

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) 
    {
        vector<int> v;
        set<int> s1;
        set<int> s2;
        s1.insert(nums1.begin(),nums1.end());
        s2.insert(nums2.begin(),nums2.end());
 
        auto it1 = s1.begin();
        auto it2 = s2.begin();
 
        while(it1 != s1.end() && it2 != s2.end())
        {
            if(*it1 < *it2)
            {
                it1++;
            }
            else if(*it1 > *it2)
            {
                it2++;
            }
            else
            {
                v.push_back(*it1);
                it1++;
                it2++;
            }
        }
  
        return v;
    }
};

在这里提一下如果是找差集的话

 


2. 环形链表II

题目链接:

142. 环形链表 II - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/linked-list-cycle-ii/description/

这题使用set存储的是链表每个节点,当插入到重复的节点时,该节点就是入环的第一个节点,然后直接返回就行

思路:先定义一个set,set里面存储一个节点的指针,用一个指针把链表给遍历一遍,比如说先遍历一个3,用3查找一下在不在set里面,不在的话就把3这个节点的指针的地址放进set里面,然后继续遍历,当再次遍历到2这个节点时,发现set里面有2这个节点的地址,那么就说明这个链表是环形链表,并且2是这个环形链表的入口点

 

class Solution {
public:
    ListNode *detectCycle(ListNode *head)
    {
        set<ListNode*> L;
        ListNode* cur = head;
        while(cur)
        {
            if(L.count(cur))
            {
                return cur;
            }
            else
            {
                L.insert(cur);
            }
            cur = cur->next;
        }
        return nullptr;
    }
};

 


完结撒花~

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值