מיטל פון קייט אין מענגע


שוועריקייט לעוועל מיטל
אָפט געבעטן אין קאַדענס ינדיאַ עקספּעדיאַ פרעעטשאַרגע גריי אָראַנדזש ראָבלאָקס Snapchat סנאַפּדעאַל Times אינטערנעט יאַנדעקס
מענגע אָנפֿרעג פּראָבלעם

פּראָבלעם סטאַטעמענט

די פּראָבלעם "מיינען פון קייט אין מענגע" שטאַטן אַז איר באַקומען אַן ינטעגער מענגע און q נומער פון קוויריז. יעדער אָנפֿרעג כּולל די לינקס און רעכט ווי אַ קייט. די פּראָבלעם ויסזאָגונג פרעגט צו געפֿינען די דורכשניטלעך ווערט פון די שטאָק פון אַלע ינטאַדזשערז וואָס זענען אין אַ געגעבן קייט.

בייַשפּיל

array[] = {2, 5, 1, 6, 7, 8}

Query: {(1, 4), (0,2), (4,5)}
4 2 7

דערקלערונג

(1,4) אַזוי מיינען ווערט פון 5,1,6,7 וואָס איז 4

(0,2) אַזוי מיינען ווערט פון 2,5,1 וואָס איז 2

(4,5) אַזוי מיינען ווערט פון 7,8 וואָס איז 7

מיטל פון קייט אין מענגע

 

אַלגאָריטהם

  1. שאַפֿן אַן PreMeanSum מענגע און יניטיאַליזירן זיין ערשטער ווערט ווי די ווערט פון די געגעבן מענגע.
  2. אַריבער די מענגע פון ​​1 און קראָם די סומע פון ​​די פריערדיקע ווערט פון פּרעמעאַנסום און די קראַנט ווערט פון די געגעבן מענגע אין די קראַנט ווערט פון פּרעמעאַנסום מענגע.
  3. באַקומען די לינקס און רעכט שטעלע פון ​​די אָנפֿרעג און קאָנטראָלירן אויב די לינקס שטעלע איז 0, אויב אמת, צוריק די קוואָטיענט פון PreMeanSum [רעכט] / רעכט + 1.
  4. אַנדערש צוריקקומען די ווערט פון PreMeanSum [רעכט] -PreMeanSum [לינקס - 1] / רעכט - לינקס +1.

דערקלערונג

מיר האָבן געגעבן אַ ינטאַדזשער מענגע און Q נומער פון פֿראגן. דעריבער, מיר האָבן געבעטן צו ווייַזן די שטאָק ווערט פון די דורכשניטלעך פון די נומערן וואָס זענען אין די געגעבן קייט. אזוי, אַ פּשוט צוגאַנג וואָס קענען זיין נאכגעגאנגען ווי פֿאַר יעדער אָנפֿרעג, מיר פאָרן די מענגע פֿון די סטאַרטינג פונט פון די קייט צו די סאָף פונט פון די קייט. און קראָם די סומע פון ​​אַלע די וואַלועס צו אַ באַזונדער ווערט. רעכן אויב מיר האָבן צו געפֿינען די דורכשניטלעך פון (0, איך). אַזוי אַז ערר [איך], מיר וועט האָבן צו סומע אַלע וואַלועס פון מענגע נול, איינער אַרויף צו די געגעבן יט ווערט. דערנאָך מיר וועלן צוריקקומען די קוואָטיענט פון די סומע און די גאַנץ נומער פון וואַלועס וואָס סאַכאַקל איז געמאכט.

אבער איין כיסאָרן פון דעם איז אַז מיר מוזן דורכגיין די געגעבן קייט פֿאַר יעדער אָנפֿרעג אויב מיר האָבן N פֿראגן. עס וועט אַריבער די נומער פון צייט, אָבער דער צוגאַנג וואָס מיר נוצן עס וועט צוריקקומען די ענטפער פון יעדער אָנפֿרעג אין קעסיידערדיק צייט נאָך מיר בויען דעם מענגע אַמאָל.

מיר וועלן בויען די מענגע פֿאַר וואָס מיר האָבן דערקלערט די מענגע פּרעמעאַנסום מענגע. ערשט דער ערשטע עלעמענט פון די PreMeanSum מענגע ווי דער ערשטער ווערט פון די געגעבן מענגע. מיר וועלן אַריבער די מענגע פֿון איין צו די לענג פון די מענגע. דער ציל פון דאָס איז אַז מיר האָבן צו קראָם די סומע פון ​​צוויי שכייניש ווערט צו די קראַנט ווערט בשעת דורכפאָר. דעריבער מיר האָבן קאַפּיד די ערשטער ווערט און סטאַרטינג פֿון 1. מיר וועלן באַקומען די קייט ווי אַ סטאַרטינג פונט און סאָף פונט. נאָך דעם, מיר וועלן קאָנטראָלירן אויב די געגעבן לינקס ווערט איז גלייַך צו 0, אויב אמת, און דעמאָלט צוריק די אָפּטייל פון פּרעמעאַנסום [רעכט] / רעכט + 1, נאָר סומע / גאַנץ נומער פון וואַלועס. אַנדערש מיר וועלן צוריקקומען די דיוויזשאַן פון דיפעראַנסיז פון PreMeanSum [רעכט] -PreMeanSum [לינקס -1] און רעכט-לינקס + 1. דאָס וועט זיין די פארלאנגט ענטפער.

קאָדעקס

C ++ קאָד צו געפֿינען די דורכשניטלעך קייט אין מענגע

#include<iostream>
#include<math.h>

#define MAX 1000005
using namespace std;

int PreMeanSum[MAX];

void buildPreMean(int arr[], int n)
{
    PreMeanSum[0] = arr[0];
    for (int i = 1; i < n; i++)
        PreMeanSum[i] = PreMeanSum[i - 1] + arr[i];
}

int getMeanInRange(int l, int r)
{
    if (l == 0)
        return floor(PreMeanSum[r] / (r + 1));

    return floor( (PreMeanSum[r] - PreMeanSum[l - 1]) / (r - l + 1));
}

int main()
{

    int arr[] = {2,5,1,6,7,8 };
    int n = sizeof(arr) / sizeof(arr[0]);
    buildPreMean(arr, n);
    cout << getMeanInRange(1, 4) << endl;
    cout << getMeanInRange(0, 2) << endl;
    cout << getMeanInRange(4, 5) << endl;
    return 0;
}
4
2
7

Java קאָד צו געפֿינען די דורכשניטלעך קייט אין די מענגע

class MeanInRange
{
    public static final int MAX = 1000005;

    static int PreMeanSum[] = new int[MAX];

    static void buildPreMean(int arr[], int n)
    {
        PreMeanSum[0] = arr[0];
        for (int i = 1; i < n; i++)
            PreMeanSum[i] = PreMeanSum[i - 1] + arr[i];
    }

    static int getMeanInRange(int l, int r)
    {
        if (l == 0)
            return (int)Math.floor(PreMeanSum[r] / (r + 1));

        return (int)Math.floor((PreMeanSum[r] -
                                PreMeanSum[l - 1]) / (r - l + 1));
    }

    public static void main(String[] args)
    {
        int arr[] = {2,5,1,6,7,8 };
        int n = arr.length;
        buildPreMean(arr, n);
        System.out.println(getMeanInRange(1, 4));
        System.out.println(getMeanInRange(0, 2));
        System.out.println(getMeanInRange(4, 5));
    }
}
4
2
7

קאַמפּלעקסיטי אַנאַליסיס

צייט קאַמפּלעקסיטי

אָ (n + q) ווו "Q" איז די נומער פון פֿראגן צו זיין דורכגעקאָכט ווי די קענען זיין קאַלקיאַלייטיד אין אָ (1) צייט קאַמפּלעקסיטי. אָ (N) צייט איז פארלאנגט צו פּרעקאָמפּוט די פּרעמעאַנסום.

ספעיס קאַמפּלעקסיטי

אָ (N) ווו “N” איז די נומער פון עלעמענטן אין דער מענגע.