متوسط ​​الصفيف بعد إزالة بعض عناصر حل Leetcode


مستوى الصعوبة سهل
كثيرا ما يطلب في جوجل
مجموعة

بيان المشكلة

في مشكلة "متوسط ​​المصفوفة بعد إزالة بعض العناصر" لدينا مصفوفة. جميع عناصر المصفوفة هي أعداد صحيحة موجبة. حجم المصفوفة من مضاعفات 20.

مهمتنا هي إيجاد متوسط ​​المصفوفة ازالة أصغر 5٪ عناصر وأعلى 5٪ عناصر.

مثال

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

التفسير:

متوسط ​​الصفيف بعد إزالة بعض عناصر حل Leetcode

تُظهر الصورة المصفوفة المحددة بعد الفرز. بعد إزالة أعلى وأدنى 5٪ عناصر ، يكون مجموع العنصر المتبقي 172 ، وإجمالي عدد العناصر المتبقية 36. وبالتالي يصبح المتوسط ​​4.77778.

نهج لمتوسط ​​الصفيف بعد إزالة بعض عناصر حل 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

كود Java لـ Mean of Array بعد إزالة بعض العناصر

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

تحليل التعقيد لمتوسط ​​المصفوفة بعد إزالة بعض عناصر حل Leetcode

تعقيد الوقت

التعقيد الزمني للشفرة أعلاه O (nlogn) لأننا نفرز المصفوفة المعطاة. هنا n هو طول المصفوفة المعطاة.

تعقيد الفضاء

تعقيد الفضاء من الكود أعلاه يا (1) لأننا نستخدم متغيرًا فقط لتخزين الإجابة.

المراجع