Problémové prohlášení
Maximální počet obyvatel Rok řešení LeetCode říká, že – Dostanete 2D celočíselné pole logs
kde každý logs[i] = [birth
i, death
i]
označuje rok narození a úmrtí ith
osoba.
Projekt populace nějakého roku x je počet lidí naživu během daného roku. The ith
osoba se počítá v roce x
's populace if x
je v včetně rozsah [birth
i, death
i - 1]
. Všimněte si, že osoba je ne počítáno v roce, kdy zemřou.
Návrat Rok s maximálním počtem obyvatel.
Příklad 1:
Vstup:
logs = [[1993,1999],[2000,2010]]
Výstup:
1993
Vysvětlení:
The maximum population is 1, and 1993 is the earliest year with this population.
Příklad 2:
Vstup:
logs = [[1950,1961],[1960,1971],[1970,1981]]
Výstup:
1960
Vysvětlení:
The maximum population is 2, and it had happened in years 1960 and 1970. So the maximum population year is 1960.
Omezení:
1 <= logs.length <= 100
1950 <= birth
i< death
i<= 2050
ALGORITHM –
- Chcete-li najít rok maximálního počtu obyvatel. Nejprve se zaměříme na celkový počet obyvatel v každém roce tak, že zkontrolujeme každý interval dané matice a najdeme maximální počet a vrátíme rok maximální hodnoty. Pokud je počet stejný, jednoduše vrátíme předchozí rok (nejstarší rok).
Přístup pro maximální počet obyvatel Rok řešení LeetCode
– Nejprve vytvoříme jedno pole o velikosti 101, protože omezení let leží v rozmezí 1950 až 2050.
– poté spustíme cyklus od 0 do délky log a zvýšíme počet pole na indexu(logs[i][o]) o 1 a snížíme počet pole na indexu (logs[i ][1]) od 1
– opět spustíme cyklus od 0 do délky pole a započítáme jednu proměnnou prev a aktualizujeme každý prvek pole pomocí array+prev a update prev pomocí prev = array[i].
– konečně spustíme smyčku a najdeme maximální hodnotu v poli a vrátíme tento konkrétní index (index+1950). Najděte tedy maximální počet obyvatel v roce.
Kód:
Maximální rok populace Řešení Python Leetcode:
class Solution: def maximumPopulation(self, logs: List[List[int]]) -> int: arr = [0]*101 for i in range(len(logs)): arr[logs[i][0]-1950] += 1 arr[logs[i][1]-1950] -= 1 previous = arr[0] for i in range(1,101): arr[i] += previous previous = arr[i] print(arr) maxi = 0 ind = 0 for i in range(len(arr)): if arr[i] > maxi: maxi = arr[i] ind = i + 1950 print(maxi) return ind
Maximální rok populace Řešení Java Leetcode:
class Solution { public int maximumPopulation(int[][] logs) { int[] arr = new int[101]; for(int i = 0;i < logs.length;i++){ arr[logs[i][0]-1950] +=1; arr[logs[i][1]-1950] -=1; } int prev = arr[0]; for(int i=1;i<arr.length;i++){ arr[i] += prev; prev = arr[i]; } int ind = 0; int maxi = 0; for(int i=0;i<arr.length;i++){ if(maxi < arr[i]){ maxi = arr[i]; ind = i+1950; } } return ind; } }
Analýza složitosti řešení Leetcode pro rok s maximálním počtem obyvatel:
Časová složitost
Časová složitost výše uvedeného řešení je O(n).
Časová složitost
Prostorová složitost výše uvedeného řešení je O(1).
Protože jsme vytvořili pole délky = 101. Můžeme ho tedy považovat za konstantní