1. 两个数组的交集
题目链接:349. 两个数组的交集 - 力扣(LeetCode)https://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)https://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;}
};
完结撒花~