ស្វែងរកកំពូលបីម្តងហើយម្តងទៀតនៅក្នុងអារេ


កម្រិតលំបាក មានភាពងាយស្រួល
សួរញឹកញាប់ MAQ o9 ដំណោះស្រាយ Wipro
អារេ ហាស់

បញ្ហា“ រកឃើញកំពូលទាំងបីម្តងហើយម្តងទៀតនៅក្នុងអារេ” ចែងថាអ្នកត្រូវបានផ្តល់ឱ្យ អារេ នៃលេខ n ដែលមានលេខម្តងហើយម្តងទៀតនៅក្នុងវា។ ភារកិច្ចរបស់អ្នកគឺស្វែងរកលេខដែលបានធ្វើម្តងហើយម្តងទៀតចំនួន 3 ក្នុងជួរមួយ។

ឧទាហរណ៍

ស្វែងរកកំពូលបីម្តងហើយម្តងទៀតនៅក្នុងអារេ

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

ការពន្យល់

នៅទីនេះ 1,3 និង 6 ត្រូវបានធ្វើម្តងទៀតពីរដង។

[2,4,2,1,5,6,8,5,3,9,0,1]
1 2 5

ការពន្យល់

នៅទីនេះ 1,2 និង 5 ត្រូវបានធ្វើម្តងទៀតពីរដង។

ក្បួនដោះស្រាយដើម្បីស្វែងរកធាតុដដែលៗចំនួន ៣

  1. ប្រកាស ផែនទី និងថ្នាក់កំណត់ដោយអ្នកប្រើហៅថាផែ។
  2. ត្រឡប់ប្រសិនបើមិនមានយ៉ាងហោចណាស់បីតម្លៃ។
  3. រាប់និងទុកប្រេកង់នៃធាតុនីមួយៗនៃធាតុបញ្ចូល អារេ ហើយបញ្ចូលវាទៅក្នុងផែនទី។
  4. បង្កើតវត្ថុនៃថ្នាក់គូហើយចាប់ផ្តើមវាដោយតម្លៃអប្បបរមានៃចំនួនគត់។
  5. ពេលធ្វើដំណើរឆ្លងកាត់ផែនទី។
    1. ពិនិត្យមើលថាតើភាពញឹកញាប់នៃគ្រាប់ចុចបច្ចុប្បន្នធំជាងវត្ថុដែលបានកំណត់។
    2. ប្រសិនបើពិតបន្ទាប់មកប្តូរគ្រាប់ចុចនិងតម្លៃទាំងអស់ទៅវត្ថុផ្សេងទៀតនៃផែ។
  6. បោះពុម្ពធាតុទាំងបីខាងលើ។

ការពន្យល់

យើងត្រូវបានផ្តល់អារេជាមួយចំនួនគត់មួយចំនួនដែលផ្ទុកនៅក្នុងវា។ បញ្ហានិយាយថារកឃើញធាតុដដែលៗចំនួន ៣ ។ ដូច្នេះគំនិតចម្បងរបស់យើងគឺរាប់និងរក្សាទុកប្រេកង់នៃធាតុនីមួយៗ។ យើងនឹងធ្វើវាដោយប្រើផែនទី។ បន្ទាប់មកមានគំនិតមួយទៀតគឺប្រកាសថ្នាក់ហើយប្រើវត្ថុរបស់ថ្នាក់នោះដើម្បីពិនិត្យនិងរក្សាទុកគុណតម្លៃរបស់យើងដែលអាចជាលទ្ធផលរបស់យើង។

យើងនឹងរាប់ប្រេកង់ធាតុនីមួយៗហើយបន្ទាប់មកប្រៀបធៀបជាមួយប្រេកង់ផ្សេងទៀតនៅក្នុងផែនទីដែលជាចំនួនកាន់តែច្រើនដូចដែលយើងធ្លាប់បានរកឃើញថាមិនមានលេខធំជាងនៅបីលេខទៀតទេ។

ចូរយើងពិចារណាឧទាហរណ៍ហើយយល់ពីរឿងនេះ។

មកដល់ [] = {៩, ៤, ២, ៩, ១, ៩, ១៥, ១, ១៥, ១៥, ១, ២, ៩}

ចាប់ផ្តើមជាមួយនឹងការរាប់ប្រេកង់នៃធាតុនីមួយៗដែលមាននៅក្នុងអារេ។ យើងនឹងបញ្ចប់ការបង្កើតផែនទីដែលធាតុនិងប្រេកង់របស់វាត្រូវបានរក្សាទុក។ ផែនទីរបស់យើងនឹងមានតម្លៃដូចខាងក្រោមៈ

Freq= {1:3, 2:2, 4:1, 9:4,15:3,9:4}

យើងមានអ្វីដែលយើងត្រូវការហើយទាំងអស់នេះយើងគ្រាន់តែត្រូវរកលេខ ៣ ដដែលៗ។ ចំពោះបញ្ហានេះយើងចាប់ផ្តើមតម្លៃនៃវត្ថុនៃថ្នាក់គូជាមួយនឹងតម្លៃអប្បបរមានៃចំនួនគត់។ យើងនឹងឆ្លងកាត់គ្រាប់ចុចនីមួយៗនិងប្រេកង់របស់វា។ បន្ទាប់មកប្រៀបធៀបជាមួយវត្ថុដូចជា x.first, y.first, z.first ។ ហើយនៅចុងបញ្ចប់យើងបោះពុម្ពធាតុដដែលៗចំនួន ៣ ក្នុងជួរមួយ។

លេខកូដ

លេខកូដ C ++ ដើម្បីស្វែងរកកំពូលបីដែលបានធ្វើម្តងទៀតនៅក្នុងអារេ

#include <bits/stdc++.h>
using namespace std;
void getRepeatedNumbers(int arr[], int n)
{
    if (n < 3)
    {
        cout << "INVALID !! PLEASE ENTER CORRECT INPUT";
        return;
    }
    unordered_map<int, int> fre;
    for (int i = 0; i < n; i++)
        fre[arr[i]]++;

    pair<int, int> x, y, z;
    x.first = y.first = z.first = INT_MIN;

    for (auto val : fre)
    {
        if (val.second > x.first)
        {
            z = y;
            y = x;

            x.first = val.second;
            x.second = val.first;
        }
        else if (val.second > y.first)
        {
            z = y;

            y.first = val.second;
            y.second = val.first;
        }
        else if (val.second > z.first)
        {
            z.first = val.second;
            z.second = val.first;
        }
    }
    cout << "Top three repeated elements are  "<< x.second << " " << y.second<< " " << z.second;
}
int main()
{
    int arr[] = { 9, 4, 2, 9, 1, 9, 15, 1, 15, 15, 1, 2, 9 };
    int n = sizeof(arr) / sizeof(arr[0]);
    getRepeatedNumbers(arr, n);
    return 0;
}
Top three repeated elements are  9 15 1

កូដចាវ៉ាដើម្បីស្វែងរកកំពូលបីម្តងហើយម្តងទៀតនៅក្នុងអារេ

import java.io.*;
import java.util.*;

class Pair
{
    int first, second;
}
class topThreeRepeatedNumber
{
    public static void getRepeatedNumbers(int[] arr, int n)
    {
        if (n < 3)
        {
            System.out.print("INVALID !! PLEASE ENTER CORRECT INPUT");
            return;
        }
        TreeMap<Integer, Integer> freq = new TreeMap<>();

        for (int i = 0; i < n; i++)
        {
            if (freq.containsKey(arr[i]))
                freq.put(arr[i], 1 + freq.get(arr[i]));
            else
                freq.put(arr[i], 1);
        }

        Pair x = new Pair();
        Pair y = new Pair();
        Pair z = new Pair();
        x.first = y.first = z.first = Integer.MIN_VALUE;

        for (Map.Entry val : freq.entrySet())
        {
            if (Integer.parseInt(String.valueOf(val.getValue())) > x.first)
            {

                z.first = y.first;
                z.second = y.second;
                y.first = x.first;
                y.second = x.second;

                x.first = Integer.parseInt(String.valueOf(val.getValue()));
                x.second = Integer.parseInt(String.valueOf(val.getKey()));
            }
            else if (Integer.parseInt(String.valueOf(val.getValue())) > y.first)
            {
                z.first = y.first;
                z.second = y.second;

                y.first = Integer.parseInt(String.valueOf(val.getValue()));
                y.second = Integer.parseInt(String.valueOf(val.getKey()));
            }
            else if (Integer.parseInt(String.valueOf(val.getValue())) > z.first)
            {
                z.first = Integer.parseInt(String.valueOf(val.getValue()));
                z.second = Integer.parseInt(String.valueOf(val.getKey()));
            }
        }

        System.out.println("Top three repeated elements are " + x.second + ", "+ y.second + ", " + z.second);
    }
    public static void main(String args[])
    {
        int[] arr = { 9, 4, 2, 9, 1, 9, 15, 1, 15, 15, 1, 2, 9 };
        int n = arr.length;
        getRepeatedNumbers(arr, n);
    }
}
Top three repeated elements are 9, 1, 15

ការវិភាគស្មុគស្មាញ

ស្មុគស្មាញពេលវេលា

អូរ (n) ដែលជាកន្លែងដែល “ n” គឺជាចំនួនធាតុក្នុងអារេ។ ដោយសារតែការប្រើប្រាស់ហាស់ម៉ាសយើងអាចកាត់បន្ថយពេលវេលាស្មុគស្មាញដោយកត្តាសំខាន់ដែលធ្វើឱ្យបញ្ហា“ រកឃើញកំពូលទាំងបីម្តងហើយម្តងទៀតជាជួរ” ។

ភាពស្មុគស្មាញនៃលំហ

អូរ (n) ដែលជាកន្លែងដែល “ n” គឺជាចំនួនធាតុក្នុងអារេ។ ក្នុងករណីដែលអាក្រក់បំផុតយើងនឹងទុក n គូដែលមានតម្លៃសំខាន់។ ដូច្នេះភាពស្មុគស្មាញនៃលំហរក៏ជាលីនេអ៊ែរដែរ។