ការផ្លាស់ប្តូរអប្បបរមាទៅនឹងធាតុអារេឡេហ្សិចដំណោះស្រាយ  


កម្រិតលំបាក មានភាពងាយស្រួល
សួរញឹកញាប់ ក្រុមហ៊ុន Amazon ផ្លែប៉ោម Coursera រោងចក្រ ជា​ការ​ពិត ក្រុមហ៊ុន JPMorgan ការងារគណិតវិទ្យា ក្រុមហ៊ុន Microsoft Swiggy
ក្បួនដោះស្រាយ ការសរសេរកូដ Drawbridge ។ សំភាសន៍ កិច្ចសម្ភាសន៍ LeetCode LeetCodeSolutions គណិតវិទ្យា

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

នៅក្នុងបញ្ហានេះយើងត្រូវបានផ្តល់ឱ្យ អារេ នៃចំនួនគត់។ ដូចគ្នានេះផងដែរយើងត្រូវបានអនុញ្ញាតឱ្យអនុវត្តសំណុំជាក់លាក់នៃប្រតិបត្តិការនៅលើអារេនេះ។ នៅក្នុងប្រតិបត្តិការមួយយើងអាចបង្កើនចំនួន” n - ១″ (ធាតុទាំងអស់លើកលែងតែធាតុណាមួយ) នៅក្នុងអារេដោយ ១ ។

យើងត្រូវរកចំនួនប្រតិបត្តិការអប្បបរមាដែលត្រូវការដើម្បីធ្វើឱ្យធាតុអារេទាំងអស់ស្មើគ្នា។

ឧទាហរណ៍

Array = {1 , 2 , 3}
3
Array = {1 , 1 , 1}

 

ការផ្លាស់ប្តូរអប្បបរមាទៅនឹងធាតុអារេឡេហ្សិចដំណោះស្រាយពិនវិធីសាស្រ្ត (គណិតវិទ្យា)  

នៅក្នុងបញ្ហានេះការលំបាកគឺជ្រើសរើសសំណុំលេខដែលអ្នកចង់បង្កើនដោយ ១ ស្មើនឹងចំនួនធាតុអារេទាំងអស់។ ទោះយ៉ាងណាក៏ដោយ ការបង្កើនធាតុ 'N - 1' នៅក្នុងអារេគឺដូចគ្នានឹងការបន្ថយធាតុអារេមួយដោយ ១ ។ នេះក៏ព្រោះតែយើងមិនចង់ដឹងថាតើអ្វីទៅជាគុណតំលៃនៃធាតុទាំងអស់នៅពេលដែលវាស្មើគ្នាផ្ទុយទៅវិញយើងចាប់អារម្មណ៍ក្នុងការស្វែងរកចំនួនចលនា។ ឥលូវនេះវិចារណញាណថាដោយសារប្រតិបត្តិការរបស់យើងគឺបន្ថយធាតុមួយក្នុងអារេដោយ ១ យើងត្រូវបំលែងធាតុទាំងអស់ក្នុងអារេទៅជាធាតុអប្បបរមាដែលមាននៅក្នុងអារេ (ព្រោះវាមិនចាំបាច់ត្រូវថយចុះទេ) បន្ថែមទៀត) ។

ការអនុវត្តសម្រាប់ការផ្លាស់ប្តូរអប្បបរមាទៅនឹងធាតុអារេឡេហ្សិចសូលុយស្យុងស្មើគ្នា

កម្មវិធី C ++

#include <bits/stdc++.h>

using namespace std;

int minMoves(vector <int> nums) {
    int mn = *min_element(nums.begin() , nums.end()) , moves = 0;
    for(int &i : nums)
        moves += i - mn;
    return moves;
}

int main() {
    vector <int> nums = {1 , 2 , 3};
    cout << minMoves(nums) << endl;
    return 0;
}

កម្មវិធីចាវ៉ា

import java.lang.*;
import java.util.*;

class min_moves {
    public static void main(String args[]) {
        int[] nums = {1 , 2 , 3};
        System.out.println(minMoves(nums));
    }

    public static int minMoves(int[] nums) {
        if(nums.length == 0)
            return 0;
        int mn = nums[0];
        for(int i = 0 ; i < nums.length ; i++) {
            mn = Math.min(mn , nums[i]);
        }

        int moves = 0;
        for(int i = 0 ; i < nums.length ; i++) {
            moves += nums[i] - mn;
        }

        return moves;
    }
}
3

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

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

O (N), N = ទំហំនៃអារេ។ យើងឆ្លងកាត់អារេទាំងមូលតែម្តង។

សូម​មើល​ផង​ដែរ
ដំណោះស្រាយម៉ូណូតូនីអារេឡេតឃូដ

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

ឱ (១)ដូចដែលយើងប្រើទំហំចងចាំថេរនៅក្នុងអារេ។

1