ٻن ڳن listsيل فهرستن مان جوڙو ڳڻپ ڪريو جن جي رقم ڏنل قيمت جي برابر آهي


تڪليف جي سطح وچولو
بار بار پڇڻ ۾ ايڊوب Amazon اوولارا Expedia فاتح گوگل يقينا Microsoft جي PayPal Tesla
هاشمي ڳن -يل فهرست ترتيب ڏيڻ

مسئلي جو بيان

مسئلو ”ٻن ڳن listsيل فهرستن مان جڙندڙ ڳڻپ ڪريو جن جي رقم هڪ ڏنل قيمت جي برابر آهي” بيان ڪيو ويو آهي ته توهان کي ٻه ڳن listsيل فهرستون ۽ هڪ انجيل ويل رقم ڏنل آهي مسئلي جو بيان معلوم ڪرڻ لاءِ چيو ته ڏنل ڪُل جوڙي ڏنل رقم جي برابر رقم آهي.

مثال

LinkedList1 = 11 à 6 à 1 à 8

LinkedList2 = 5 à 3 à 1 à 9

Sum = 9
2

وضاحت: ٻه جوڙا آهن ، 6 ، 3 ، ۽ 8 ، 1 جيڪي ڏنل قيمت 9 کي گڏ ڪري ٿو.

 

الگورٿم ڳن linkedيل لسٽن مان جوڑوں کي ڳڻڻ لاءِ جنهن جي رقم هڪ ڏنل قيمت جي برابر آهي

1. Push all the integer values to the two different linked lists.
2. Declare a set.
3. Set the count to 0.
4. Iterate over the first linked list and put all the values of it into the linked list1.
5. Iterate over the second linked list
    1. Check if the set contains the difference between the value of x and a current element of linked list2.
        1. If true then increase the value of count by 1.
6. Return count.

وضاحت

اسان کي انپٽ جي طور تي انجيٽل قيمت ڏني وئي آهي. تنهن ڪري ، اسان انهن سڀني کي ڳن listsيل فهرستن ۾ دٻائينداسين. سي ++ ۾ ، اسان انهي حل کي انجام ڏيڻ لاءِ ٻاهرئين طور تي ڳن listيل فهرست لاڳو ڪرڻ جو طريقو ٺاهيو آهي. پر جاوا ۾ ، اسان وٽ ڳن Listيل لسٽ وارو هڪ تعمير ٿيل طبقو آهي جنهن جي مدد سان اسان آساني سان ڳن integيل فهرست ۾ سڀني انٽيگرز قدرن کي دٻائي سگھون ٿا. ھاڻي اسان ٻنھي ڳن listsيل فهرستن ۾ ان جوڙي کي ڳولڻ لاءِ چيو آھي جنھن جو تعداد ڏنل ڏنل قيمت تي مشتمل آھي.

اسان ڳن theيل فهرست ۾ سڀني انڌي اقدار کي وڌائڻ وارا آهيون. اسان استعمال ٿيڻ وارا آهيون مقرر ڊيٽا جو andانچو ۽ ڳن linkedيل فهرست جي سڀني قدرن کي ڇاڻيو وڃي ٿو ۽ سيٽ ڪرڻ لاءِ پهرين ڳن linkedيل فهرست جي سڀني قدرن کي ذخيرو ڪري ٿو. سيٽ پڻ اها خاصيت فراهم ڪري ٿو ته عام عناصر سيٽ مان پاڻمرادو ختم ٿي ويندا آهن. تنهن ڪري جيڪڏهن اسان ايندڙ وقت ۾ پڻ سيٽ استعمال ڪندا سين ته عام عنصرن لاءِ ڪو مسئلو نه هوندو ، ۽ پڻ هتي ڳن theيل فهرست ۾ اتي ڪوبه عام عنصر نه هوندو.

ھاڻي اسان وٽ ڳن listيل لسٽ 1 ۾ شامل آھي سڀ قدر. ھاڻي اسان ٻئي ڳن listيل فهرست مان ڳولھون ٿا ۽ چڪاس ڪنداسين ته ڇا x ۽ ٻيءَ لسٽ جي ھر ويليو جو فرق سيٽ ۾ موجود آھي يا نه. جيڪڏھن موجود آھي ته ھاڻي اسان کي ھڪڙي جوڙي مليو آھي ۽ پڻ 1 جي حساب سان وڌاسين. اھو مطلب آھي 1 جوڙو مليو ۽ اھو ڳڻيو ويو. تعصب جي آخر ۾. ڳڻپ جو قدر عدد جو تعداد هوندو جيڪو ڏنل قيمت جي برابر رقم آهي.

ٻن ڳن listsيل فهرستن مان جوڙو ڳڻپ ڪريو جن جي رقم ڏنل قيمت جي برابر آهي

ڪوڊ

C ++ ٻن ڳن listsيل فهرستن مان جوڑوں کي ڳڻڻ لاءِ جن جي رقم هڪ ڏنل قيمت جي برابر آهي

#include<iostream>
#include<unordered_set>

using namespace std;

struct Node
{
    int data;
    struct Node* next;
};

void implementLinkedList(struct Node** headReference, int newItem)
{
    struct Node* newNode =	(struct Node*) malloc(sizeof(struct Node));

    newNode->data = newItem;

    newNode->next = (*headReference);

    (*headReference) = newNode;
}
int getPairOfsum (struct Node* head1, struct Node* head2,int sum)
{
    int count = 0;

    unordered_set<int> SET;

    while (head1 != NULL)
    {
        SET.insert(head1->data);

        head1 = head1->next;
    }

    while (head2 != NULL)
    {
        if (SET.find(sum - head2->data) != SET.end())
            count++;

        head2 = head2->next;
    }
    return count;
}
int main()
{
    struct Node* head1 = NULL;
    struct Node* head2 = NULL;

    implementLinkedList (&head1,11);
    implementLinkedList (&head1, 6);
    implementLinkedList (&head1, 1);
    implementLinkedList (&head1, 8);

    implementLinkedList (&head2, 5);
    implementLinkedList (&head2, 3);
    implementLinkedList (&head2, 1);
    implementLinkedList (&head2, 9);

    int sum = 9;

    cout << "Count = "<< getPairOfsum (head1, head2, sum);
    return 0;
}
Count = 2

جاوا ڪوڊ ٻن ڳن listsيل لسٽن مان جوڑوں کي ڳڻڻ لاءِ جنهن جي رقم هڪ ڏنل قيمت جي برابر آهي

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;

class PairOfSumInLinkedList1
{
    public static int getPairOfsum(LinkedList<Integer> head1, LinkedList<Integer> head2, int sum)
    {
        int count = 0;

        HashSet<Integer> SET = new HashSet<Integer>();

        Iterator<Integer> itr1 = head1.iterator();
        while (itr1.hasNext())
        {
            SET.add(itr1.next());

        }

        Iterator<Integer> itr2 = head2.iterator();
        while (itr2.hasNext())
        {
            if (!(SET.add(sum - itr2.next())))
                count++;

        }
        return count;
    }
    public static void main(String[] args)
    {
        Integer arr1[] = {11, 6, 1, 8};
        Integer arr2[] = {5, 3, 1, 9};

        LinkedList<Integer> head1 = new LinkedList<>(Arrays.asList(arr1));

        LinkedList<Integer> head2 = new LinkedList<>(Arrays.asList(arr2));

        int x = 9;

        System.out.println("Count = " + getPairOfsum(head1, head2, x));
    }
}
Count = 2

پيچيدگي تجزيي

وقت جي پيچيدگي

اي (ن 1 + ن 2) جتي “ن 1” ۽ “ن 2” ڳن linkedيل لسٽ ۾ عنصر جا تعداد آھن. اسان وقت جي پيچيدگي حاصل ڪرڻ جي قابل آهيون. ڇو ته اسان ٻنهي ڳن listsيل فهرستن مان سفر ڪيو آهي ۽ هيش سيٽ کي استعمال ڪيو آهي.

خلائي پيچيدگي

جتان اسان ٻن ڳن listsيل لسٽن ۾ انپٽ محفوظ ڪيو ۽ هڪ هاشٽ استعمال ڪيو. اسان وٽ آهي لڪير واري خلائي پيچيدگي حل.