Միջին աշխատավարձ `բացառելով նվազագույն և առավելագույն աշխատավարձի Leetcode լուծումը


Դժվարության մակարդակ Հեշտ
Հաճախակի հարցնում են NetSuite
LeetCode

Խնդրի հայտարարություն

Խնդրի մեջ » Միջին Աշխատավարձ ՝ բացառությամբ նվազագույն և առավելագույն աշխատավարձի »աշխատավարձի զանգված: որտեղ զանգվածի յուրաքանչյուր տարր ներկայացնում է տարբեր աշխատողների աշխատավարձը: Rayանգվածի յուրաքանչյուր արժեք եզակի է:

Մեր խնդիրն է հաշվարկել աշխատողի միջին աշխատավարձը `բացառությամբ նվազագույն և առավելագույն աշխատավարձի:

Օրինակ

Salary= [8000,9000,2000,3000,6000,1000]
4750.0

Բացատրությունը.

Միջին աշխատավարձ `բացառելով նվազագույն և առավելագույն աշխատավարձի Leetcode լուծումը

Տրված աշխատավարձի զանգվածում 9000-ը առավելագույն աշխատավարձն է, իսկ 1000-ը `նվազագույն աշխատավարձը: Քանի որ մենք պետք է գտնենք միջին աշխատավարձը ՝ չհաշված այն նվազագույն և առավելագույն աշխատավարձ, այնպես որ մենք այս արժեքները չենք ավելացնի ընդհանուր գումարին: Ընդհանուր գումարը 19000 է, ուստի միջինը 19000/4 է, այսինքն ՝ 4750:

Մոտեցում

Սա մաթեմատիկայի հիմնական խնդիր է: Մեր խնդիրն է գտնել նվազագույն և առավելագույն աշխատավարձը, ապա գտնել մնացած աշխատավարձի միջինը: Մենք հետևելու ենք այս քայլերին.

  1. Նախաձեռնարկեք նվազագույն աշխատավարձը INT_MAX- ով, առավելագույն աշխատավարձը ՝ INT_MIN- ով: Մենք աշխատավարձի գումարը պահելու համար կօգտագործենք փոփոխական, այնպես որ այն նախաստորագրենք 0-ով:
  2. Անցեք զանգվածը և յուրաքանչյուր աշխատավարձ գումարեք գումարին: Միևնույն ժամանակ, նաև թարմացրեք նվազագույն աշխատավարձի և առավելագույն աշխատավարձի արժեքը:
  3. Եթե ​​n- ի արժեքը երեքից փոքր է, ապա միջին աշխատավարձը կլինի զրո, այլապես կլինի միջին աշխատավարձը (ընդհանուր աշխատավարձ - նվազագույն աշխատավարձ - առավելագույն աշխատավարձ) / (n-2):
  4. Մենք բազմապատկելու ենք (n-2) 1.0-ով, քանի որ միջին աշխատավարձը կարող է լինել կրկնակի արժեք:

Միջին աշխատավարձի ծածկագիր `բացառելով աշխատավարձի նվազագույն և առավելագույն Leetcode լուծումը

C ++ ծածկագիր

#include <bits/stdc++.h> 
using namespace std; 
       double average(vector<int>& salary) {
        int n=salary.size();
        int mn=INT_MAX,mx=INT_MIN,sum=0;
        for(int i=0;i<n;i++)
        {
            sum=sum+salary[i];
            mn=min(mn,salary[i]);
            mx=max(mx,salary[i]);
        }
        double ans=(sum-mn-mx)/((n-2)*1.0);
        if(n>2)
            return ans;
        else 
            return 0;
    }
int main() 
{ 
 vector<int> arr = {8000,9000,2000,3000,6000,1000}; 
 cout<<average(arr)<<endl; 
 return 0;
}
4750.0

Java կոդ

import java.util.Arrays; 
public class Tutorialcup {
        public static double average(int[] salary) {
        int n=salary.length;
        int mn=Integer.MAX_VALUE,mx=Integer.MIN_VALUE,sum=0;
        for(int i=0;i<n;i++)
        {
            sum=sum+salary[i];
            mn=Math.min(mn,salary[i]);
            mx=Math.max(mx,salary[i]);
        }
        double ans=(sum-mn-mx)/((n-2)*1.0);
        if(n>2)
            return ans;
        else 
            return 0;
    }
  public static void main(String[] args) {
    int [] arr = {8000,9000,2000,3000,6000,1000}; 
    double ans=  average(arr);
    System.out.println(ans);
  }
}
4750.0

Միջին աշխատավարձի բարդության վերլուծություն `բացառելով նվազագույն և առավելագույն աշխատավարձի Leetcode լուծումը

Timeամանակի բարդությունը

Վերոնշյալ ծածկագրի ժամանակի բարդությունն է O (n) քանի որ մենք աշխատավարձի զանգվածը միայն մեկ անգամ ենք անցնում: Այստեղ n- ը աշխատավարձի զանգվածի երկարությունն է:

Տիեզերական բարդություն

Վերոնշյալ ծածկագրի տիեզերական բարդությունն է Ո (1) քանի որ մենք պատասխանը պահելու համար օգտագործում ենք միայն փոփոխական:

Սայլակ