অন্য অ্যারে দ্বারা সংজ্ঞায়িত ক্রম অনুসারে একটি অ্যারে বাছাই করুন


কাঠিন্য মাত্রা সহজ
প্রায়শই জিজ্ঞাসা করা হয় মর্দানী স্ত্রীলোক মাইক্রোসফট এসএপি ল্যাব Snapchat নরপশু Zoho
বিন্যাস খোঁজ শ্রেণীবিভাজন

সমস্যা বিবৃতি

তোমাকে দু'জন দেওয়া হয় অ্যারে of পূর্ণসংখ্যার arr1 [] এবং arr2 []। "অন্য অ্যারে দ্বারা সংজ্ঞায়িত ক্রম অনুসারে একটি অ্যারে বাছাই করুন" সমস্যাটি জিজ্ঞাসা করে সাজান দ্বিতীয় অ্যারে অনুসারে প্রথম অ্যারে যাতে প্রথম অ্যারেতে সংখ্যার তুলনামূলকভাবে অ্যারে 2 এর সমস্ত মানগুলিকে সাজানো হবে []। এবং প্রথম অ্যারেতে থাকা উপাদানগুলি যা দ্বিতীয় অ্যারেতে নেই সেগুলি অ্যারের শেষে সাজানো উপায়ে .োকানো হবে।

উদাহরণ

arr1[] = { 2,1,2,5,1,3,6,8,8 }

arr2[] = { 2,1,8,3}
2 2 1 1 8 8 3 5 6

ব্যাখ্যা

A1 এ 2 অনুসারে বাছাই করা হয়।

অন্য অ্যারে দ্বারা সংজ্ঞায়িত ক্রম অনুসারে একটি অ্যারে বাছাই করুন

 

অন্য অ্যারে দ্বারা সংজ্ঞায়িত ক্রম অনুসারে একটি অ্যারে বাছাই করার জন্য অ্যালগরিদম

1. Sort the array using the qsort method or comparator interface.
2. Search the value in arr2[] and find its index value.
3. Check if
  1. Both of the returned value is -1 if true then return the difference between the returned value.
  2. If one of the first returned values is -1 if true then return the -1.
  3. If the second returned value is -1, then return 1.
4. Else return the value of the difference of the input value.
5. Print the sorted array.

ব্যাখ্যা

আমরা দুজনকে দিয়েছি পূর্ণসংখ্যা অ্যারে। তারপরে আমাদের জিজ্ঞাসা করা হয় সাজান দ্বিতীয় অ্যারে অনুযায়ী প্রথম অ্যারে। অ্যারেগুলির মধ্যে একটিতে পুরো মানগুলি বাছাই করতে হবে। এবং অন্যান্য অ্যারেটিতে কয়েকটি মান রয়েছে যা আমাদের প্রথম অ্যারে বাছাই করতে হবে। এর অর্থ যদি আমাদের দ্বিতীয় অ্যারেতে দেওয়া নম্বর থাকে (1, 2, 3, 4)। এবং আমাদের প্রথম অ্যারেতে 1s অনুসন্ধান করতে হবে এবং এটিকে প্রথমে একটি অ্যারে অনুসারে বাছাই করতে হবে। তারপরে আমাদের দ্বিতীয় অ্যারেতে 2 আছে। প্রথম অ্যারেতে 2s এর সমস্ত সন্ধান করুন এবং তারপরে এটিকে প্রথম অ্যারেতে রেখে দিন ইত্যাদি।

কাঙ্ক্ষিত ফলাফলটি অনুসন্ধানের জন্য আমরা ইনবিল্ট পদ্ধতিটি ব্যবহার করব। সি ++ এ আমরা ব্যবহার করব be qsort পদ্ধতি, qsort পদ্ধতি একটি পূর্বনির্ধারিত পদ্ধতি যা কুইকসোর্ট অ্যালগরিদম হিসাবে ব্যবহৃত হয়। যে কোনও তালিকাকে সাজানোর জন্য এটি দ্রুততম একটি অ্যালগরিদম। এবং জাভাতে, আমরা দ্বিতীয় অ্যারে অনুসারে অ্যারে বাছাই করতে তুলনামূলক ইন্টারফেস ব্যবহার করব। পদ্ধতিটি দুটি মান বেছে নেবে। তুলনা করার জন্য, এবং তারপরে আমরা অ্যারে দ্বিতীয়টিতে সন্ধানের জন্য সেই মানটি পাস করব। যদি এটি অ্যারে উপস্থিত থাকে তবে দ্বিতীয়টি উপস্থিত থাকে তবে এটি তার দুটি মানের জন্য সূচকটি ফিরিয়ে দেবে, এটি উপস্থিত নেই, তবে আমরা মান -1 প্রদান করব।

আমরা কিছু শর্ত তৈরি করেছি। আমরা যদি উভয়ই প্রত্যাশিত মানকে ধনাত্মক হিসাবে পাই। তারপরে আমরা ফিরে আসা মানগুলির পার্থক্যটি ফিরিয়ে দেব। ইতিমধ্যে যদি প্রথম মানটি হয় তবে ফেরত -1 করুন। অন্যথায় যদি কেবলমাত্র দ্বিতীয় মানটি ইতিবাচক হয় তবে 1 টি প্রদান করুন case সমস্ত তুলনার পরে অ্যারে বাছাই করা হবে। শেষে সাজানো অ্যারে মুদ্রণ করুন।

কোড

অন্য অ্যারে দ্বারা সংজ্ঞায়িত ক্রম অনুসারে একটি অ্যারে বাছাই করতে সি ++ কোড

#include <stdio.h>
#include<iostream>

using namespace std;

int Arr2[4];

int size = 4;

int searchElement(int key)
{
    int i;
    for (i = 0; i < size; i++)
        if (Arr2[i] == key)
            return i;
    return -1;
}

int compareValuesFromArray(const void* a, const void* b)
{
    int eleIndex1 = searchElement(*(int*)a);
    int eleIndex2 = searchElement(*(int*)b);
    if (eleIndex1 != -1 && eleIndex2 != -1)
        return eleIndex1 - eleIndex2;
    else if (eleIndex1 != -1)
        return -1;
    else if (eleIndex2 != -1)
        return 1;
    else
        return (*(int*)a - *(int*)b);
}

void sortAccAnotherArray(int A1[], int size1)
{
    qsort(A1, size1, sizeof(int), compareValuesFromArray);
}

int main()
{
    int Arr1[] = {1,4,2,4,6,4,7,2,2,3 };
    int Arr2[]= {1,2,3,4};
    int n = sizeof(Arr1) / sizeof(Arr1[0]);

    sortAccAnotherArray(Arr1, n);

    for (int i = 0; i <n; i++)
        printf("%d ", Arr1[i]);
    return 0;
}
1 2 2 2 3 4 4 4 6 7

জাভা কোড অন্য অ্যারে দ্বারা সংজ্ঞায়িত ক্রম অনুসারে একটি অ্যারে বাছাই করুন

import java.util.*;
import java.util.Arrays;

class SortAnArray
{
    private static int Arr1[] = { 1,4,2,4,6,4,7,2,2,3};
    private static int Arr2[]= {1,2,3,4};

    private static int size = Arr2.length;

    public static int searchElement(int key)
    {
        int i;
        for (i = 0; i < size; i++)
            if (Arr2[i] == key)
                return i;
        return -1;
    }

    public static void sortAccAnotherArray(int A1[], int size1)
    {
        Integer[]sortedArr = Arrays.stream(A1).boxed().toArray(Integer[]::new);

        Arrays.sort(sortedArr, new Comparator<Integer>()
        {
            public int compare(Integer o1, Integer o2)
            {

                int a = o1.intValue();
                int b = o2.intValue();

                int eleIndex1 = searchElement(a);
                int eleIndex2 = searchElement(b);

                if (eleIndex1 != -1 && eleIndex2 != -1)
                    return eleIndex1 - eleIndex2;
                else if (eleIndex1 != -1)
                    return -1;
                else if (eleIndex2 != -1)
                    return 1;
                else
                    return (a - b);
            }
        });
        int[] finalArr = Arrays.stream(sortedArr).mapToInt(Integer::intValue).toArray();
        System.out.println(Arrays.toString(finalArr));
    }

    public static void main(String [] args)
    {

        int n = Arr1.length;

        sortAccAnotherArray(Arr1, n);
    }

}

[1, 2, 2, 2, 3, 4, 4, 4, 6, 7]

জটিলতা বিশ্লেষণ

সময় জটিলতা

ও (এমএন লগম) কোথায় "M" এআর 1 এর দৈর্ঘ্য এবং "এন" arr2 এর দৈর্ঘ্য। যেহেতু আমরা qsort ব্যবহার করেছি (অ্যালগরিদমকে বাছাই করে)। আমরা অর্জন করেছি ও (এন লগ এন) ফ্যাক্টর। এখানে অনুসন্ধান লিনিয়ার অনুসন্ধান ব্যবহার করে সম্পন্ন হয়। এবং এটি না করে আমরা সহজেই একটি হ্যাশম্যাপ ব্যবহার করতে পারতাম যা সময়ের জটিলতা আরও কমিয়ে দিত।

স্পেস জটিলতা ity

ও (লগ এন), কোথায় "M" এবং "এন" আরার 1 এবং আরার 2 এর দৈর্ঘ্য। কারণ আমরা দ্রুত বাছাই করে বাছাই করেছি তাই স্থান জটিলতা কারণ। তবে সামগ্রিকভাবে প্রোগ্রামটি লাগে ও (এন + এম)