是否有在地图中查找公共键值对的功能或方法?
is there a function or way to find common key value pair in a map?
这道题要求我求两个链表的交集。我用 对创建了两个地图。我想检查公共键值对。列表未排序。
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
unordered_map <int,ListNode*> mp;
unordered_map <int,ListNode*> m;
while(headA != NULL){
mp[headA->val] = headA;
headA = headA ->next;
}
while(headB != NULL){
m[headB->val] = headB;
headB = headB ->next;
}
//I have to make changes here
}
使用 map 会导致 O(n) space 的复杂度,最好先获取两个列表的长度,然后移动列表的头部,该头部更长,长度为它的额外长度.以下方法的时间复杂度为 O(n + m),space 复杂度为 O(1)。
int getLengthLL(ListNode* head){
int cnt = 0;
while(head){
head = head->next;
cnt++;
}
return cnt;
}
ListNode* getIntersectionLL(ListNode* l1, ListNode* l2){
int n1 = getLengthLL(l1);
int n2 = getLengthLL(l2);
while(n1 > n2){
l1 = l1->next;
n1--;
}
while(n2 > n1){
l2 = l2->next;
n2--;
}
while(l1 and l2){
if(l1 == l2){
return l1;
}
l1 = l1->next;
l2 = l2->next;
}
return nullptr;
}
这道题要求我求两个链表的交集。我用
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
unordered_map <int,ListNode*> mp;
unordered_map <int,ListNode*> m;
while(headA != NULL){
mp[headA->val] = headA;
headA = headA ->next;
}
while(headB != NULL){
m[headB->val] = headB;
headB = headB ->next;
}
//I have to make changes here
}
使用 map 会导致 O(n) space 的复杂度,最好先获取两个列表的长度,然后移动列表的头部,该头部更长,长度为它的额外长度.以下方法的时间复杂度为 O(n + m),space 复杂度为 O(1)。
int getLengthLL(ListNode* head){
int cnt = 0;
while(head){
head = head->next;
cnt++;
}
return cnt;
}
ListNode* getIntersectionLL(ListNode* l1, ListNode* l2){
int n1 = getLengthLL(l1);
int n2 = getLengthLL(l2);
while(n1 > n2){
l1 = l1->next;
n1--;
}
while(n2 > n1){
l2 = l2->next;
n2--;
}
while(l1 and l2){
if(l1 == l2){
return l1;
}
l1 = l1->next;
l2 = l2->next;
}
return nullptr;
}