Dairəvi massivdəki ardıcıl fərqlərin cəmini maksimuma çatdırın

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Cadence Hindistan eBay GE Healthcare Karat Quora SAP Laboratoriyaları kvadrat
Geyim Görməmiş çeşidləyiciBaxılıb 65

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Problem bəyanat

Tutaq ki, bir tam array. Bu sıra a kimi qəbul edilməlidir dairəvi massiv. Bir massivin son dəyəri birinci massivə bağlanacaq, an ⇒ a1. “Dairəvi massivdəki ardıcıl fərqlərin cəmini maksimuma çatdırmaq” problemi hər ardıcıl element arasındakı fərqin maksimum cəmini tapmağı xahiş edir. Beləliklə, ardıcıl bir element arasındakı fərqi tapmalısınız. Dizi nömrələrini yenidən düzəltməyə icazə verilir. Fərqlərinin cəmi maksimum olmalıdır.

Maksimum cəmi = | a1 - a2 | + | a3 - a4 | + | an-1 - an | + | an - a1 |

misal

arr[]={9, 8, 4, 2}
22

Izahat

Verilən massivi 9, 2, 8, 4 olaraq düzəldə bilərik, sonra verəcəkdir

| 9 - 2 | + | 2 - 8 | + | 8 - 4 | + | 4 - 9 | = 22

Dairəvi massivdəki ardıcıl fərqlərin cəmini maksimuma çatdırınPin

Alqoritm

1. Set a variable output to 0.
2. Sort the given array.
3. Traverse up to n/2 length of the array(n is the length of the array).
    1. Sum up the value of output and array’s last values and store it to sum.
    2. Get the difference of output and twice of array’s starting value and store it to the output.
4. Return the value of output.

Izahat

Verilmişdir array of tamsayılar. Diziyə a kimi baxılmalıdır dairəvi massiv birbaşa son elementdən sonra ilk elementə keçmək olar. Ardıcıl elementlər arasındakı fərqlərin maksimum cəmini tapmaq istəndi. Dizini yenidən təşkil etmək üstünlüyümüz var. Fərqlərin cəmini maksimum dərəcədə artıra biləcəyik.

Burada bir sıra verdik. Dizini həqiqətən yenidən düzəltməyəcəyik, sadəcə nömrələri ilə oynaya bilərik. İndi serialın yalnız yarısını keçəcəyik. Bu, yalnız massivin n / 2 uzunluğundadır, burada n dizinin həqiqi uzunluğudur. Çıxış deyilən bir dəyişən elan etdik. Hansı sıra fərqlərini alacaq. Və sonra yekunlaşdırın və çıxmaq üçün saxlayın. Ancaq massivi keçmədən əvvəl sıra sıralanacaq. Dizini artan qaydada olmasına görə sıralayacağıq. Sonra sıralama massivdə ən aşağı sayımız olan massiv massivin başlanğıcındadır. Dizidəki daha çox say massivin sonunda olur.

Massivi sıraladığımız üçün yalnız massivi massivin uzunluğunun yarısına qədər keçməliyik. Sonra serialın cari dəyərinin və çıxış dəyərinin iki qatının fərqini alırıq və onu çıxmaq üçün saxlayırıq. Bununla fərqi alırıq və sonra serialın dəyərindən iki dəfə çox olan son qiymətini alırıq. Və sonra çıxış dəyərini əlavə edin və nəticədə saxlayın. Bu prosesi massivin uzunluğunun yarısına çatana qədər saxlayın və nəticənin dəyərini qaytarın.

Kodu

Dairəvi massivdəki ardıcıl fərqlərin cəmini maksimuma çatdırmaq üçün C ++ kodu

#include<iostream>
#include<algorithm>

using namespace std;

int getMaxDiff(int arr[], int n)
{
    int output = 0;

    sort(arr, arr + n);

    for (int i = 0; i < n/2; i++)
    {
        output -= (2 * arr[i]);
        output += (2 * arr[n - i - 1]);
    }

    return output;
}
int main()
{
    int arr[] = { 9, 8, 2, 4 };
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << getMaxDiff(arr, n) << endl;
    return 0;
}
22

Dairəvi massivdəki ardıcıl fərqlərin cəmini maksimuma çatdırmaq üçün Java kodu

import java.util.Arrays;

class maximumDiff
{
    public static int getMaxDiff(int arr[], int n)
    {
        int output = 0;

        Arrays.sort(arr);

        for (int i = 0; i < n/2; i++)
        {
            output -= (2 * arr[i]);
            output += (2 * arr[n - i - 1]);
        }

        return output;
    }
    public static void main (String[] args)
    {
        int arr[] = {9, 8, 2, 4 };
        int n = arr.length;
        System.out.println(getMaxDiff(arr, n));
    }
}
22

Mürəkkəblik təhlili

Zamanın mürəkkəbliyi

O (n log n) hara "N" massivdəki elementlərin sayıdır. Çünki biz serialı sıraladıq. Beləliklə, zamanın mürəkkəbliyi birləşmə növünə bənzəyir. Bu zaman mürəkkəbliyinin yuxarı sərhədini göstərir.

Kosmik Mürəkkəblik

O (1) əlavə yer tələb olunmadığı üçün. Beləliklə, alqoritmin tələb etdiyi kosmik mürəkkəblik sabitdir. Ancaq bütün proqramın kosmik mürəkkəbliyi doğrudur.

Crack Sistemi Dizayn Müsahibələri
Translate »