Leetcode həllini ala biləcəyiniz maksimum sikkə sayı

Çətinlik səviyyəsi Mühit
alqoritmlər kodlaşdırma müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutions çeşidləyiciBaxılıb 47

Problem bəyanat

“Ala biləcəyiniz Maksimum Sikkə Sayısı” problemində bizə 3 * n yığın sikkə verilir. Bu sikkə yığınları aranızda və iki dostunuz Alice və Bob arasında paylanmalıdır. Sikkələrin yığınlarının paylanması qaydaları belədir:

  1. Üç yığını seçəcəksiniz.
  2. Bu 3 yığının içərisində, Alice maksimum pul olan yığını alır.
  3. İkinci maksimum pulu olan yığını alacaqsınız.
  4. Bob ən az sikkə yığını alacaq.
  5. Bütün yığın sikkələr paylanmayana qədər bu addımları təkrarlayın.

Yuxarıda göstərilən qaydalara riayət edərək əldə edə biləcəyiniz maksimum pul sayını tapmaq lazımdır.

misal

piles = [9,8,7,6,5,1,2,3,4]
18

Explanation:

Yığınları aşağıdakı şəkildə seçəcəksiniz:

  • (9,8,1)
  • (7,6,2)
  • (5,4,3)

Bu xov seçmə üsulu, 18 sikkə olan maksimum sikkə sayını əldə etməyinizə səbəb olacaqdır.

Leetcode həllini əldə edə biləcəyiniz maksimum sikkə sayına yaxınlaşma

Bu problemi həll etmək üçün hər hiylə sizi ən çox sayda sikkə əldə etməyinizə səbəb olacaq hər dəfə 3 yığın seçmə yolunun arxasında durur.

  • Bob ən az sikkə yığını alır. Beləliklə, hər dəfə minimum miqdarda sikkə olan bütün qalan yığınlardan bir yığın seçəcəyik. Bobun bütün n yığınları 3 * n yığınlardan ən az sikkə ilə əldə etməsini təmin edəcəkdir.
  • Hər dəfə maksimum sikkə sayını qalan qalan yığınlardan iki yığını seçəcəyik. Alice maksimum sikkə olan yığını alır. İkinci maksimum sikkə sayı ilə yığını alırsınız.
  • Yığınları maksimum və minimum sikkə sayı ilə əldə etmək üçün edəcəyik cür massiv.
  • Aşağıda göstərilən görüntü Alice, Bob və You arasında yığınların paylanmasını izah edir.

leetcode həllini ala biləcəyiniz maksimum sikkə sayınaPin

Həyata keçirilməsi

Ala biləcəyiniz Maksimum Sikkə Sayısı üçün C ++ kodu

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

Ala biləcəyiniz Maksimum Sikkə Sayısı üçün Java kodu

import java.util.Arrays; 
public class Tutorialcup {
    public static int  maxCoins(int[] piles) {
          Arrays.sort(piles);
        int res = 0, n = piles.length;
        for (int i = n / 3; i < n; i += 2)
            res += piles[i];
        return res;
    }
  public static void main(String[] args) {
    int [] arr = {9,8,7,6,5,1,2,3,4}; 
    int ans=  maxCoins(arr);
    System.out.println(ans);
  }
}
18

Leetcode həllini əldə edə biləcəyiniz maksimum sikkələrin mürəkkəblik analizi

Zaman mürəkkəbliyi

Yuxarıdakı kodun zaman mürəkkəbliyi O (nlogn) çünki biz serialı çeşidləyirik. Burada n massivin ölçüsüdür.

Kosmik mürəkkəblik

Yuxarıdakı kodun kosmik mürəkkəbliyi O (1) çünki cavabı saxlamaq üçün yalnız dəyişəndən istifadə edirik.

References

Şərh yaz

Translate »