Массиви максималӣ аз ду массиви додашуда Тартиби якхела  


Сатҳи душворӣ миёна
Аксар вақт пурсида мешавад Accenture Amazon Деҳлӣ Маълумот Фуркайтҳо Хонаҳои OYO Publicis Sapient Зохо
тартиботи ҳарбӣ Хаш

Фарз мекунем, ки мо ду адад дорем асал ҳамон андозаи n. Ҳарду массив метавонанд рақамҳои умумиро низ дар бар гиранд. Дар изҳороти масъала хоҳиш карда мешавад, ки массиви натиҷагирандае тартиб дода шавад, ки дорои арзиши максималии 'n' аз ҳарду массив бошад. Массиви аввал бояд афзалият дошта бошад (дар натиҷа аввал унсурҳои массиви аввал бояд пайдо шаванд). Массиви натиҷа аз ҳарду массиви додашуда унсурҳои максималӣ хоҳад буд, аммо унсурҳои умумӣ бояд як маротиба омада, аввал массивро афзалият диҳанд.

мисол  

Қайд:

int arr1 [] = {3,7,9,1,4}

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

Натиҷа:

{7, 9, 8, 6, 5}

Шарҳ:

Азбаски 7, 9 унсурҳои массиви аввал мебошанд, ба тавре ки он дар натиҷа дар ҷои аввал меистад.

Қайд:

int arr1 [] = {9,3,2}

int arr2 [] = {6,4,1}

Натиҷа:

{9, 6, 4}

Алгоритми массиви максималӣ аз ду массиви додашуда Тартиби якхеларо  

  1. Табдил додани ҳарду массив ба вектор.
  2. Ҳарду векторро бо пайдарпаии болораванда ҷудо кунед.
  3. Ҳарду векторро ҳамзамон убур кунед ва қиматҳои калонтари ҳарду векторро дар якҷоягӣ бо басомади элемент ба харита тела диҳед.
  4. Вектори нави "натиҷа" созед.
  5. Санҷед, ки оё дар як унсури маъмул мавҷуд аст харита ва инчунин дар массив аввал, он гоҳ ин унсурро ба вектори баромади илова кунед.
  6. Тафтиш кунед, агар дар харита ва инчунин дар массиви дуюм як унсури маъмул мавҷуд бошад, он гоҳ касонеро интихоб кунед, ки басомади онҳо 1 аст ва онҳоро ба вектори баромад илова кунед.
  7. "Натиҷа" вектори натиҷавиро чоп кунед.
ҳамчунин нигаред
Баргардонидани ҳадди аққали қавс

Шарҳ  

Табдил додани ҳарду массив ба вектор ва бо тартиби кам шудан ба онҳо ҷудо кардан. Бо ин, мо метавонем қиматҳои ҳарду массивро ба вектор гирем ва аввал рақамҳои калонтарро дар пайдарпаии ҳарду вектор дорем. Ҳамин тавр, мо метавонем 'n' -ро интихоб кунем рақами максималӣ аз ҳарду массив.

Барои баррасии парвандаи унсурҳои маъмулӣ, мо чӣ кор кардан мехоҳем, ҳамзамон векторҳоро муқоиса карда, аз ҳарду массив максимумро интихоб карда, бо басомади онҳо ба харита гузорем, бо ин мо метавонем чашм нигоҳ кунем, ки агар имкон бошад унсурҳои маъмул бошанд, мо n элементҳои максималиро ба харита тела медиҳем, агар мо як унсурро на як бору ду бор ёбем, мо танҳо басомади онҳоро афзоиш медиҳем ва онҳо ҳамчун ҷузъи изофӣ дар харита ҳисоб карда намешаванд, онҳо хоҳанд буд ҳамчун басомади 2, 3 ё бештар ишора карда шудааст .. Пас, дар гузашти баъдтар, мо метавонем онро нодида гирем ва массиви аввалро афзалият диҳем.

Мо ҳарду массив ва харитаро тай карданием. Аввалан, мо бояд массиви аввалро бо харита тай намоем, агар ягон унсури маъмулие, ки дар харита ва инчунин массив мавҷуд аст, мо бояд онро ба вектори баромад, ки дар натиҷа сохтаем, тела диҳем. Он гоҳ мо массиви дуюмро убур хоҳем кард, зеро унсури умумиро дар натиҷа низ нигоҳ доштан мумкин аст, аз ин рӯ, дар инҷо баробари арзиши умумӣ аз массиви дуюм ва харита, мо тафтиш мекунем, ки оё он элемент дар харита басомади 1 дорад ё не , пас танҳо мо онро ба вектори натиҷавӣ тела медиҳем. Ва дар ниҳоят, он векторро чоп кунед.

ҳамчунин нигаред
Рақамҳои максималии пайдарпай дар массив мавҷуданд

татбиќи  

Барномаи C ++ барои массиви максималӣ аз ду массиви додашуда Тартиби якхела

#include<iostream>
#include<unordered_map>
#include<vector>
#include<algorithm>

using namespace std;

void makeGreaterFirstArray(int A[], int B[], int n)
{
    vector<int> V1(A, A+n);
    vector<int> V2(B, B+n);
    sort(V1.begin(), V1.end(), greater<int>());
    sort(V2.begin(), V2.end(), greater<int>());

    unordered_map<int, int> MAP;
    int i = 0, j = 0;
    while (MAP.size() < n)
    {
        if (V1[i] >= V2[j])
        {
            MAP[V1[i]]++;
            i++;
        }
        else
        {
            MAP[V2[j]]++;
            j++;
        }
    }
    vector<int> output;
    for (int i = 0; i < n; i++)
        if (MAP.find(A[i]) != MAP.end())
            output.push_back(A[i]);

    for (int i = 0; i < n; i++)
        if (MAP.find(B[i]) != MAP.end() && MAP[B[i]] == 1)
            output.push_back(B[i]);

    for (int i = 0; i < n; i++)
        cout << output[i] << " ";
}
int main()
{
    int arr1[] = {3,7,9,1,4};
    int arr2[] = {2,8,6,5,3};
    int n = sizeof(arr1) / sizeof(arr1[0]);
    makeGreaterFirstArray(arr1, arr2, n);
    return 0;
}
7 9 8 6 5

Барномаи Java барои массиви максималӣ аз ду массиви додашуда Тартиби якхеларо

import java.util.Collections;
import java.util.Vector;
import java.util.HashMap;
import java.util.Arrays;
import java.util.stream.Collectors;

class findsubarray
{
    public static void makeGreaterFirstArray(int []A, int []B, int n)
    {
        Vector<Integer> V1 = new Vector<>();
        Vector<Integer> V2 = new Vector<>();

        Integer[] I1 = Arrays.stream( A ).boxed().toArray( Integer[]::new );
        Integer[] I2 = Arrays.stream( B ).boxed().toArray( Integer[]::new );


        Collections.addAll(V1, I1);
        Collections.addAll(V2, I2);

        Collections.sort(V1, Collections.reverseOrder());
        Collections.sort(V2, Collections.reverseOrder());


        HashMap<Integer, Integer> MAP = new HashMap<Integer, Integer>();

        int i = 0, j = 0;
        while (MAP.size() < n)
        {
            if (V1.get(i) >= V2.get(j))
            {
                if(MAP.containsKey(V1.get(i)))
                {
                    MAP.put(V1.get(i), MAP.get(V1.get(i))+1);
                    i++;
                }
                else
                {
                    MAP.put(V1.get(i),1);
                    i++;
                }
            }
            else
            {
                if(MAP.containsKey(V2.get(j)))
                {
                    MAP.put(V2.get(j), MAP.get(V2.get(j))+1);
                    j++;
                }
                else
                {
                    MAP.put(V2.get(j),1);
                    j++;
                }
            }
        }
        Vector<Integer> output = new Vector<Integer>();

        for (int a = 0; a < n; a++)
            if (MAP.containsKey(A[a]))
                output.add(A[a]);

        for (int b = 0; b < n; b++)
            if (MAP.containsKey(B[b]) && MAP.get(B[b])==1)
                output.add(B[b]);


        System.out.println(output);
    }
    public static void main(String [] args)
    {
        int arr1[] = {3,7,9,1,4};
        int arr2[] = {2,8,6,5,3};
        int n = arr1.length;
        makeGreaterFirstArray(arr1, arr2, n);
    }
}
[7, 9, 8, 6, 5]

Таҳлили мураккабӣ барои массиви максималӣ аз ду массиви додашуда, ки тартиботро яксон нигоҳ медоранд  

Мураккабии вақт

O (n log n) ки дар "Н" дарозии массивҳо мебошад.

ҳамчунин нигаред
Масофаи максималӣ дар массив

Мураккабии фазо

Эй (н) ки дар "Н" дарозии массивҳо мебошад.