បង្កើនផលបូកនៃភាពខុសគ្នាជាបន្តបន្ទាប់នៅក្នុងអារេរាងជារង្វង់  


កម្រិតលំបាក មានភាពងាយស្រួល
សួរញឹកញាប់ Cadence ឥណ្ឌា របស់ eBay ក្រុមហ៊ុន GE សុខភាព ការាត់ Quora មន្ទីរពិសោធន៍អេសអេស ការ៉េ
អារេ លោភលន់ តម្រៀប

សេចក្តីថ្លែងការណ៍បញ្ហា។  

ឧបមាថាអ្នកមាន integer អារេ។ អារេនេះគួរតែត្រូវបានចាត់ទុកជាក អារេរាងជារង្វង់។ តម្លៃចុងក្រោយនៃអារេមួយនឹងត្រូវភ្ជាប់ទៅនឹងអារេទី ១ កn ⇒ a1 ។ បញ្ហា“ បង្កើនផលបូកនៃភាពខុសគ្នាជាបន្តបន្ទាប់ក្នុងជួររាងជារង្វង់” ស្នើឱ្យរកផលបូកអតិបរមានៃភាពខុសគ្នារវាងធាតុជាប់គ្នា។ ដូច្នេះអ្នកត្រូវរកភាពខុសគ្នារវាងធាតុជាប់គ្នា។ អ្នកត្រូវបានអនុញ្ញាតឱ្យរៀបចំលេខអារេឡើងវិញ។ បែបនេះដែលផលបូកនៃភាពខុសគ្នារបស់ពួកគេគួរតែមានអតិបរមា។

ផលបូកអតិបរមា = | a1 - a2 | + | a3 - a4 | + | កn-1 - កn | + | កn - a1 |

ឧទាហរណ៍  

arr[]={9, 8, 4, 2}
22

ការពន្យល់

យើងអាចរៀបចំអារេដែលបានផ្តល់ដូចជា 9, 2, 8, 4 បន្ទាប់មកវានឹងផ្តល់ឱ្យ

| ៩ - ២ | + | ២ - ៨ | + | ៨ - ៤ | + | ៤ - ៩ | = ២២

បង្កើនផលបូកនៃភាពខុសគ្នាជាបន្តបន្ទាប់នៅក្នុងអារេរាងជារង្វង់

ក្បួនដោះស្រាយ  

1. Set a variable output to 0.
2. Sort the given array.
3. Traverse up to n/2 length of the array(n is the length of the array).
    1. Sum up the value of output and array’s last values and store it to sum.
    2. Get the difference of output and twice of array’s starting value and store it to the output.
4. Return the value of output.

ការពន្យល់  

ដែល​បាន​ផ្ដល់​ឱ្យ អារេ of ចំនួនគត់។ អារេគួរតែត្រូវបានចាត់ទុកជាក អារេរាងជារង្វង់ ដែលអាចឆ្លងកាត់ធាតុទីមួយដោយផ្ទាល់បន្ទាប់ពីធាតុចុងក្រោយ។ យើងត្រូវបានស្នើសុំឱ្យរកផលបូកអតិបរមានៃភាពខុសគ្នារវាងធាតុជាប់គ្នា។ ហើយយើងមានគុណសម្បត្តិក្នុងការរៀបចំអារេឡើងវិញ។ បែបនោះយើងអាចទទួលផលបូកនៃភាពខុសគ្នាបានច្រើនបំផុត។

សូម​មើល​ផង​ដែរ
ដំណោះស្រាយអ៊ីសូហ្វុលលីសលីឡេកកូដ

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

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

លេខកូដ  

លេខកូដ C ++ ដើម្បីបូកផលបូកនៃភាពខុសគ្នាជាបន្តបន្ទាប់នៅក្នុងអារេរាងជារង្វង់

#include<iostream>
#include<algorithm>

using namespace std;

int getMaxDiff(int arr[], int n)
{
    int output = 0;

    sort(arr, arr + n);

    for (int i = 0; i < n/2; i++)
    {
        output -= (2 * arr[i]);
        output += (2 * arr[n - i - 1]);
    }

    return output;
}
int main()
{
    int arr[] = { 9, 8, 2, 4 };
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << getMaxDiff(arr, n) << endl;
    return 0;
}
22

កូដចាវ៉ាដើម្បីបង្កើនផលបូកនៃភាពខុសគ្នាជាបន្តបន្ទាប់គ្នានៅក្នុងជួររាងជារង្វង់

import java.util.Arrays;

class maximumDiff
{
    public static int getMaxDiff(int arr[], int n)
    {
        int output = 0;

        Arrays.sort(arr);

        for (int i = 0; i < n/2; i++)
        {
            output -= (2 * arr[i]);
            output += (2 * arr[n - i - 1]);
        }

        return output;
    }
    public static void main (String[] args)
    {
        int arr[] = {9, 8, 2, 4 };
        int n = arr.length;
        System.out.println(getMaxDiff(arr, n));
    }
}
22

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

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

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

សូម​មើល​ផង​ដែរ
បុព្វបទដែលវែងជាងគេដោយប្រើពាក្យដោយការផ្គូផ្គងពាក្យ

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

ឱ (១) ដោយមិនចាំបាច់មានទំហំបន្ថែម។ ដូច្នេះភាពស្មុគស្មាញនៃអវកាសដែលទាមទារដោយក្បួនដោះស្រាយគឺថេរ។ ប៉ុន្តែភាពស្មុគស្មាញនៃលំហនៃកម្មវិធីទាំងមូលគឺលីនេអ៊ែរ។