Vandamál yfirlýsing
Hámarks mannfjöldaár LeetCode lausn segir að - Þú færð 2D heiltalna fylki logs
þar sem hver logs[i] = [birth
i, death
i]
gefur til kynna fæðingar- og dánarár ith
manneskja.
The íbúa einhvers árs x er fjöldi fólks á lífi á því ári. The ith
maður er talinn á árinu x
íbúafjölda ef x
er í innifalið svið [birth
i, death
i - 1]
. Athugið að viðkomandi er það ekki talið árið sem þeir deyja.
Arðsemi Hámarksfjöldi Ár.
Dæmi 1:
inntak:
logs = [[1993,1999],[2000,2010]]
Output:
1993
Útskýring:
The maximum population is 1, and 1993 is the earliest year with this population.
Dæmi 2:
inntak:
logs = [[1950,1961],[1960,1971],[1970,1981]]
Output:
1960
Útskýring:
The maximum population is 2, and it had happened in years 1960 and 1970. So the maximum population year is 1960.
Takmarkanir:
1 <= logs.length <= 100
1950 <= birth
i< death
i<= 2050
ALGÓRITIMA -
- Til að finna hámarksfjöldaár. Í fyrsta lagi munum við einbeita okkur að heildarfjölda íbúa á hverju ári með því að haka í hvert bil tiltekins fylkis og finna hámarksfjölda og skila ári hámarksgildis. Ef fjöldinn er sá sami þá skilum við einfaldlega fyrra ári (fyrsta árið).
Nálgun fyrir hámarks mannfjöldaár LeetCode lausn
– Í fyrsta lagi munum við búa til eina fylki af stærð 101 vegna þess að áramótin liggja á bilinu 1950 til 2050.
- eftir það munum við keyra lykkju frá 0 að lengd logs og munum auka fjölda fylkisins við index(logs[i][o]) um 1 og lækka fjölda fylkisins við index (logs[i] ][1]) eftir 1
– aftur munum við keyra lykkju frá 0 að lengd fylkisins og láta eina breytu prev telja og uppfæra hvern þátt í fylkinu með fylki+prev og uppfæra prev by prev = fylki[i].
– loksins munum við keyra lykkju og finna hámarksgildið í fylkinu og skila þeirri tilteknu vísitölu (index+1950). Finndu því hámarksfjöldaár.
code:
Hámarks mannfjöldaár Python Leetcode lausn:
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
Hámarksfjöldi ár Java Leetcode lausn:
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; } }
Flækjustigsgreining á hámarks mannfjöldaári Leetcode lausn:
Tímaflækjustig
Tímaflókni ofangreindrar lausnar er O(n).
Tímaflækjustig
Space Complexity ofangreindrar lausnar er O(1).
Eins og við höfum búið til fylki með lengd = 101. Þannig að við getum talið það stöðugt