Given two arrays, write a function to compute their intersection.
Example 1:
Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2]
Example 2:
Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4] Output: [4,9]
Note:
- Each element in the result should appear as many times as it shows in both arrays.
- The result can be in any order.
Follow up:
- What if the given array is already sorted? How would you optimize your algorithm?
- What if nums1's size is small compared to nums2's size? Which algorithm is better?
- What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
C#
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode GetIntersectionNode(ListNode headA, ListNode headB) {
ListNode p1 = headA;
ListNode p2 = headB;
int length1= 0;
int length2 = 0;
while(p1 != null)
{
p1=p1.next;
length1++;
}
while (p2 != null)
{
p2= p2.next;
length2++;
}
p1=headA;
p2=headB;
if(length1>length2)
{
for (int i = 0; i<length1-length2; i++)
{
p1 = p1.next;
}
}
else
{
for (int i = 0; i<length2-length1; i++)
{
p2 = p2.next;
}
}
while(p1 != p2)
{
p1 = p1.next;
p2 = p2.next;
}
return p1;
}
}