អត្ថន័យនៃអារេបន្ទាប់ពីបានដោះចេញនូវធាតុមួយចំនួននៃ Leetcode ដំណោះស្រាយ


កម្រិតលំបាក មានភាពងាយស្រួល
សួរញឹកញាប់ ក្រុមហ៊ុន google
អារេ

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

នៅក្នុងបញ្ហា“ អត្ថន័យនៃអារេបន្ទាប់ពីដោះធាតុមួយចំនួន” យើងត្រូវបានផ្តល់ជូននូវជួរមួយ។ ធាតុទាំងអស់នៃអារេគឺជាចំនួនគត់វិជ្ជមាន។ ទំហំនៃអារេគឺច្រើននៃ 20 ។

ភារកិច្ចរបស់យើងគឺដើម្បីរកមធ្យោបាយនៃអារេ មិនរាប់បញ្ចូល ធាតុតូចជាងគេបំផុត ៥ ភាគរយនិងខ្ពស់ជាងគេ ៥ ភាគរយ។

ឧទាហរណ៍

arr = [6,2,7,5,1,2,0,3,10,2,5,0,5,5,0,8,7,6,8,0]
4.000000

ការពន្យល់:

អត្ថន័យនៃអារេបន្ទាប់ពីបានដោះចេញនូវធាតុមួយចំនួននៃ Leetcode ដំណោះស្រាយ

រូបភាពបង្ហាញពីអារេដែលបានផ្តល់បន្ទាប់ពីការតម្រៀប។ បន្ទាប់ពីដកចេញនូវធាតុខ្ពស់បំផុតនិងទាបបំផុត ៥% ផលបូកនៃធាតុដែលនៅសេសសល់គឺ ១៧២ ហើយចំនួនសរុបនៃធាតុដែលនៅសេសសល់គឺ ៣៦ ។ ដូច្នេះចំនួនមធ្យមប្រែជា ៤.៧៧៧៧៨ ។

វិធីសាស្រ្តសំរាប់អារេនៃអារេបន្ទាប់ពីបានដោះចេញនូវធាតុមួយចំនួននៃ Leetcode ដំណោះស្រាយ

នេះគឺជាបញ្ហាការអនុវត្តងាយស្រួល។ ខាងក្រោមនេះជាជំហានសំរាប់ដោះស្រាយបញ្ហានេះ៖

  1. តម្រៀបអារេដែលបានផ្តល់ឱ្យដូចដែលយើងត្រូវការកាត់ធាតុខ្ពស់បំផុតនិងទាបបំផុត 5% ពីអារេ។
  2. ទុកប្រវែងនៃអារេនៅក្នុងអថេរមួយ។
  3. ប្រកាសអថេរពីរ៖
    1. ដើម្បីទុកផលបូកនៃធាតុ។
    2. ដើម្បីទុកចំនួនធាតុនៅជាប់គ្នា។
  4. ឥឡូវដំណើរការរង្វិលជុំហើយរកផលបូកនៃធាតុដែលបានតុបតែង។
    1. ចំពោះបញ្ហានេះយើងនឹងចាប់ផ្តើមរង្វិលជុំពី n * 0.05 ដែល n គឺជាប្រវែងនៃអារេដែលបានផ្តល់ហើយរង្វិលជុំនឹងដំណើរការរហូតដល់ n * 0.95 ។
  5. គណនាជាមធ្យម។
    1.  ចំណុចសំខាន់ដែលត្រូវកត់សម្គាល់នៅទីនេះគឺថាវាគួរតែផ្តល់តម្លៃទ្វេមិនមែនមិនមែនជាតម្លៃគត់ទេ។

ការអនុវត្តន៍

លេខកូដ C ++ សម្រាប់ន័យនៃអារេបន្ទាប់ពីបានដកធាតុមួយចំនួនចេញ

#include <bits/stdc++.h> 
using namespace std; 
    double trimMean(vector<int>& arr) {
        sort(arr.begin(),arr.end());
        int n=arr.size();
        double sum=0,cnt=0;
        for(int i=(n*.05);i<n*.95;i++)
        { 
            sum+=arr[i];
            cnt++;
        }
        return sum/cnt;      
    }
int main() 
{ 
 vector<int> arr = {6,0,7,0,7,5,7,8,3,4,0,7,8,1,6,8,1,1,2,4,8,1,9,5,4,3,8,5,10,8,6,6,1,0,6,10,8,2,3,4}; 
 double ans=trimMean(arr);
 cout<<ans<<endl;
 return 0;
}
4.77778

កូដចាវ៉ាសំរាប់ន័យនៃអារេបន្ទាប់ពីដកចេញធាតុមួយចំនួន

import java.util.Arrays; 
public class Tutorialcup {
    public static double trimMean(int[] arr) {
     Arrays.sort(arr);
     int n = arr.length;   
     double sum = 0d,cnt=0; 
     for(int i=n / 20;i<n - n / 20;i++)
        { 
            sum+=arr[i];
            cnt++;
        }
        return sum/cnt; 
    }
  public static void main(String[] args) {
        int [] arr = {6,0,7,0,7,5,7,8,3,4,0,7,8,1,6,8,1,1,2,4,8,1,9,5,4,3,8,5,10,8,6,6,1,0,6,10,8,2,3,4}; 
        double ans=trimMean(arr); 
        System.out.println(ans);
  }
}
4.77778

ការវិភាគភាពស្មុគស្មាញនៃន័យនៃអារេបន្ទាប់ពីបានដោះចេញនូវសមាសធាតុមួយចំនួននៃឡេឡេលេខកូដ

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

ពេលវេលាស្មុគស្មាញនៃលេខកូដខាងលើគឺ O (nlogn) ពីព្រោះយើងកំពុងតំរៀបអារេដែលបានផ្តល់អោយ។ នៅទីនេះ n គឺជាប្រវែងនៃអារេដែលបានផ្តល់។

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

ភាពស្មុគស្មាញចន្លោះនៃលេខកូដខាងលើគឺ ឱ (១) ពីព្រោះយើងកំពុងប្រើតែអថេរដើម្បីរក្សាទុកចម្លើយ។

ឯកសារយោង