موارد مشترک در هر دو لیست اما با قیمت های مختلف را بشمارید  


سطح دشواری ساده
اغلب در آمازون واقعیت GE بهداشت و درمان شرکت Honeywell TCS تسلا
جستجوی دودویی مخلوط هشی کردن جستجو

بیان مسأله  

به شما دو لیست داده می شود. هر یک از این فهرست ها شامل نام مورد و قیمت آن است. در بیان مسئله خواسته می شود موارد مشترک در هر دو لیست اما با قیمت های مختلف را بشمارید ، یعنی این که دریابید چه تعداد آیتم در هر دو لیست داده شده و همچنین با قیمت های مختلف رایج است.

مثال  

List1[] = {{"egg", 60}, {"butter", 20}, {"rice", 50}, {oil", 30}}

List2[] = {{“butter", 20}, {"egg", 15},{"wheat", 40}, {"rice", 60}}
2

توضیح: فقط تخم مرغ و برنج دو عنصر مشترک در هر دو لیست و با قیمت متفاوت هستند.

الگوریتم برای شمارش موارد مشترک در هر دو لیست اما با قیمت های مختلف  

1. Declare a map and set the value of output to 0.
2. Store the first list’s name and its price to the map.
3. Traverse the second list.
    1. Check for the second list’s element, if each element’s name of the second list has a common value in list1’s name.
    2. Check for if that particular element’s price should not be equal to the element price in list1.
        1. If true, then increase the count of output by 1.
4. Return output.

توضیح

موارد مشترک در هر دو لیست اما با قیمت های مختلف را بشماریدسنجاق

ما دو تا داده ایم liste، هر یک از لیست ها حاوی مقدار دو ستون است ، حاوی نام هر مورد و قیمت آن است. وظیفه این است که عناصر مشترک در هر دو لیست را کشف کنید و همچنین قیمت آنها نباید از نظر عناصر برابر باشد. ما قصد داریم از هش و یک کلاس یا ساختار اضافی استفاده کنیم ، همچنین هش یک راه حل کارآمد را ارائه می دهد.

همچنین مشاهده کنید
عناصر متمایز مشترک در همه ردیف های ماتریس را پیدا کنید

ما از لیست اشیا استفاده خواهیم کرد. کار ما را راحت می کند. ما لیستی از نوع اشیا make را ایجاد خواهیم کرد و هر یک از اشیا two حاوی دو ویژگی آن است ، ویژگی ها نام مورد و قیمت آن است. اگر دو لیست داشته باشیم ، بنابراین برای هر شاخص می توانیم دو مقدار بگیریم و هر شاخص مانند یک شی رفتار می کند و می توانیم مقادیر موجود در آن شی را داشته باشیم. بنابراین کاری که ما می خواهیم انجام دهیم این است که لیست اول را رد می کنیم و هر عنصر را با نام خود به عنوان کلید و قیمت را به عنوان ارزش در نقشه ذخیره می کنیم. بنابراین اکنون همه عناصر لیست اول همه در نقشه.

ما لیست دوم را مرور می کنیم و هر یک از عناصر لیست را انتخاب می کنیم ، اکنون نقشه را داریم و در آن لیست اول و نام های آن قیمت ذخیره می شود. بنابراین ما فقط بررسی خواهیم کرد که آیا نام لیست عناصر فعلی در نقشه درست است یا خیر ، بررسی خواهیم کرد که آیا قیمت مرتبط با آن عنصر برابر با مقدار نقشه ای نیست که قبلاً ذخیره کرده ایم. اگر همه این شرایط درست باشد ، کافی است تعداد تولید را 1 افزایش دهید ، زیرا ما فقط باید تعداد اقلام را بشماریم و با شمارش تعداد آن مورد مشترک و قیمت آن کار را انجام می دهیم.

برای شمارش موارد مشترک در هر دو لیست اما با قیمت های مختلف کدگذاری کنید  

کد C ++

#include<iostream>
#include<unordered_map>

using namespace std;

struct item
{
    string name;
    int price;
};
int getItemCount(item list1[], int m,item list2[], int n)
{
    unordered_map<string, int> MAP;
    int output = 0;

    for (int i = 0; i < m; i++)
        MAP[list1[i].name] = list1[i].price;

    for (int i = 0; i < n; i++)
        if ((MAP.find(list2[i].name) != MAP.end()) &&(MAP[list2[i].name] != list2[i].price))
            output++;

    return output;
}
int main()
{
    item list1[] = {{"egg", 60}, {"butter", 20}, {"rice", 50}, {"oil", 30}};
    item list2[] = {{"butter", 20}, {"egg", 15}, {"wheat", 40}, {"rice", 60}};

    int m = sizeof(list1) / sizeof(list1[0]);
    int n = sizeof(list2) / sizeof(list2[0]);

    cout<< getItemCount(list1, m, list2, n);

    return 0;
}
2

 

همچنین مشاهده کنید
بزرگترین d را در آرایه پیدا کنید به طوری که a + b + c = d

کد جاوا

import java.util.*;

class CountItems
{
    public static class item
    {
        String name;
        int price;
        item(String name, int price)
        {
            this.name=name;
            this.price=price;
        }
    };
    public static int getItemCount(item list1[], int m,item list2[], int n)
    {
        HashMap<String, Integer> MAP=new HashMap<>();
        int output = 0;

        for (int i = 0; i < m; i++)
        {
            MAP.put(list1[i].name, list1[i].price);

        }
        for (int i = 0; i < n; i++)
        {
            if ((MAP.containsKey(list2[i].name) && (MAP.get(list2[i].name) != list2[i].price)))
                output++;
        }
        return output;
    }
    public static void main(String [] args)
    {
        item list1[] = {new item("egg", 60), new item("butter", 20),new item("rice", 50), new item("oil", 30)};

        item list2[] = {new item("butter", 20), new item("egg", 15),new item("wheat", 40), new item("rice", 60)};
        int m = list1.length;
        int n = list2.length;
        System.out.println(getItemCount(list1, m, list2, n));

    }
}
2

تحلیل پیچیدگی  

پیچیدگی زمان برای شمارش موارد مشترک با مشکل قیمت های مختلف

O (m + n) جایی که "متر" و "n" تعداد عناصر در list1 و list2 است.

پیچیدگی فضا برای شمارش موارد مشترک با مشکل قیمت های مختلف

از آنجا که ما فقط عناصر لیست 1 را در نقشه ذخیره می کنیم ، پیچیدگی فضا فقط به اندازه list1 بستگی دارد. بنابراین پیچیدگی فضا است O (m) جایی که "متر" تعداد عناصر موجود در لیست است.