Шумораи ҷуфтҳоро дар массив тавре ёбед, ки XOR-и онҳо 0 бошад  


Сатҳи душворӣ миёна
Аксар вақт пурсида мешавад Cadence Ҳиндустон КупонДуния Honeywell Ҳақиқатан InfoEdge Озмоишгоҳҳои Moonfrog ба дӯстат
тартиботи ҳарбӣ Бит Хаш Ҷустуҷӯ Sorting

Масъалаи "Ҷустуҷӯи миқдори ҷуфтҳо дар массив ба дараҷае, ки XOR-и онҳо 0 бошад" ҳолатеро фароҳам меорад, ки мо додаем асал of ҳаждаҳҳо. Дар баёни масъала хоҳиш карда мешавад, ки шумораи ҷуфтҳое, ки дар массив мавҷуданд, муайян карда шаванд, ки ҷуфтро доранд Ai XOR Aj = 0.

Эзоҳ: 1 камтар ё ба он баробар аст i, i камтар аз j ва j ба n (1 <= камтар ё баробар астi < j<= n).

мисол  

Шумораи ҷуфтҳоро дар массив тавре ёбед, ки XOR-и онҳо 0 бошад

arr[] = {2, 3, 1, 3, 2}
2

Шарҳ

Индекси (0,4) ва (1,3).

arr[] = {1, 1, 1}
3

Алгоритм  

  1. Максимум унсури дар массив мавҷудбударо бифаҳмед.
  2. Массиви андоза созед (унсури максималӣ).
  3. Массивро тай кунед, дар ҳоле ки i <n (дарозии массив).
    1. Басомади ҳар як унсури массивро дар массиви сохтаи мо ҳисоб кунед ва нигоҳ доред.
  4. Масви ҳисобро гузаред, дар ҳоле ки i <= унсури максималӣ.
    1. Натиҷа = натиҷа + ҳисоб [ман] * (ҳисоб [i] - 1);
  5. Натиҷаи бозгаштан / 2.

Шарҳ

Мо массиви бутун дорем. Дар изҳороти масъала хоҳиш карда мешавад, ки ҷуфти дар массив мавҷудбударо фаҳманд, ки чунин Ai XOR Aj = 0. Мо харитасозии индексро истифода мебарем, яъне маънои басомади ҳар як унсури массивро ҳисоб мекунем, то ки мо онҳоро муайян кунем, агар онҳо count [i] * count [i-1] -ро иҷро кунанд ва дар натиҷа ба баромади. Барои ҳалли ин истифодаи як асал ва дар он ҷои унсури массивие, ки ҳамчун индекси массиви ҳисоб амал мекунад, ки дар он мо басомади унсурҳои худро нигоҳ медорем, бинобар ин, агар рақам дар ҷои муайяне пайдо шавад, мо онро ҳамчун индекс истифода хоҳем кард.

ҳамчунин нигаред
Саволҳоро дар массиви дуӣ ҳисоб кунед ва иваз кунед

Мо аз массив унсури ҳадди аксарро пайдо мекунем. Ва аз ин андозаи максималии элемент, мо массив месозем, ин массиви ҳисоб аст, мо онро ҳамчун массиви басомад истифода хоҳем кард. Мо бояд массивро тай карда, ҳисоби ҳар як унсури массивро нигоҳ дорем. Пас тағирёбандаи натиҷаро ба 0 муқаррар мекунем.

Биёед як мисолро дида бароем:

мисол

arr [] = {2, 3, 1, 3, 2} андозаи максималии массив 3 хоҳад буд.

i = 0, arr [i] = 2, мо [arr [i]] + = 1 ҳисоб мекунем, ин маънои он аст, ки индекси 2-юми унсури ҳисоб ба 1 зиёд мешавад.

i = 1, arr [i] = 3, мо [arr [i]] + = 1 ҳисоб мекунем, ин маънои он аст, ки индекси 3-юми унсури ҳисоб ба 1 зиёд мешавад.

i = 2, arr [i] = 1, мо [arr [i]] + = 1 ҳисоб мекунем, ин чунин маъно дорад, ки индекси 1-уми элементи ҳисоб ба 1 зиёд мешавад.

i = 3, arr [i] = 3, мо [arr [i]] + = 1 ҳисоб мекунем, ин чунин маъно дорад, ки индекси 3-юми унсури ҳисоб ба 1 зиёд мешавад.

i = 4, arr [i] = 2, мо [arr [i]] + = 1 ҳисоб мекунем, ин маънои он аст, ки индекси 2-юми унсури ҳисоб ба 1 зиёд мешавад.

Мо массиви ҳисобро ҳамчун ҳисоб дорем [] = {0,1,2,2}

Мо ин массивро тай хоҳем кард ва ҳар дафъае ки мо output = output + count [i] * (count [i] - 1) мекунем.

Ва он натиҷаро ҳамчун натиҷа бармегардонад / 2.

Рамзи C ++ барои ёфтани шумораи ҷуфтҳо дар массив, ба тавре ки XOR-и онҳо 0 бошад  

#include<iostream>
#include<algorithm>

using namespace std;

int calculate(int a[], int n)
{
    int *maxm = max_element(a, a + 5);
    int count[*maxm + 1] = {0};

    for(int i = 0; i < n; i++)
    {
        count[a[i]] += 1;
    }
    int output = 0;
    for(int i = 0; i < (*maxm)+1; i++)
    {
        output = output + count[i] * (count[i] - 1) ;
    }
    return output/2;
}
int main()
{
    int a[] = {2, 3, 1, 3, 2};
    int n = sizeof(a) / sizeof(a[0]);
    cout <<"XOR Pairs are : "<< (calculate(a,n));
    return 0;
}
XOR Pairs are : 2

Рамзи Java барои ёфтани шумораи ҷуфтҳо дар массив, ба тавре ки XOR-и онҳо 0 бошад  

import java.util.Arrays;

class XORPair
{
    public static int calculate(int arr[], int n)
    {
        int max= Arrays.stream(arr).max().getAsInt();

        int count[] = new int[max+ 1];

        for (int i = 0; i < n; i++)
        {
            count[arr[i]] += 1;
        }
        int output = 0;
        for (int i = 0; i < (max) + 1; i++)
        {
            output = output + count[i] * (count[i] - 1);
        }
        return output / 2;
    }
    public static void main(String[] args)
    {
        int a[] = {2, 3, 1, 3, 2};
        int n = a.length;
        System.out.println("XOR Pairs are : "+calculate(a, n));
    }
}
XOR Pairs are : 2

Таҳлили мураккабӣ  

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

Эй (н) ки дар "Н" шумораи унсурҳои массив аст. Барои дастрасӣ ба унсурҳои массив вақт O (1) лозим аст. Ҳамин тариқ, мураккабии вақт хатӣ аст.

ҳамчунин нигаред
Ҷустуҷӯи унсур дар массиви мураттабшуда

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

O (Max), ки дар он Max унсури максималӣ дар байни ҳамаи элементҳои массив аст.