คำชี้แจงปัญหา
โซลูชั่น LeetCode ปีประชากรสูงสุด บอกว่า – คุณได้รับอาร์เรย์จำนวนเต็ม 2 มิติ logs
แต่ละที่ logs[i] = [birth
i, death
i]
ระบุปีเกิดและตายของ ith
คน
พื้นที่ปลูก ประชากรในบางปี x คือจำนวนคนที่มีชีวิตอยู่ในปีนั้น ดิ ith
คนถูกนับในปี x
ประชากรของ if x
อยู่ใน รวมทั้ง พิสัย [birth
i, death
i - 1]
. โปรดทราบว่าบุคคลนั้นคือ ไม่ นับในปีที่เสียชีวิต
การส่งคืนสินค้า ประชากรสูงสุด ปี.
1 ตัวอย่าง:
Input:
logs = [[1993,1999],[2000,2010]]
Output:
1993
คำอธิบาย:
The maximum population is 1, and 1993 is the earliest year with this population.
2 ตัวอย่าง:
Input:
logs = [[1950,1961],[1960,1971],[1970,1981]]
Output:
1960
คำอธิบาย:
The maximum population is 2, and it had happened in years 1960 and 1970. So the maximum population year is 1960.
ข้อ จำกัด :
1 <= logs.length <= 100
1950 <= birth
i< death
i<= 2050
อัลกอริทึม –
- เพื่อหาปีของประชากรสูงสุด อันดับแรก เราจะเน้นที่จำนวนประชากรทั้งหมดในแต่ละปีโดยการตรวจสอบในแต่ละช่วงของเมทริกซ์ที่กำหนด และจะค้นหาจำนวนสูงสุดและคืนค่าปีของค่าสูงสุด หากการนับเท่ากัน เราก็แค่ส่งคืนปีก่อนหน้า (ปีแรกสุด)
แนวทางสำหรับปีที่มีประชากรสูงสุด LeetCode Solution
– อันดับแรก เราจะสร้างอาร์เรย์ขนาด 101 ขึ้นมาหนึ่งอาร์เรย์ เนื่องจากข้อจำกัดด้านจำนวนปีอยู่ในช่วงปี 1950 ถึง 2050
– หลังจากนั้น เราจะเรียกใช้ลูปจาก 0 ถึงความยาวของบันทึกและจะเพิ่มจำนวนอาร์เรย์ที่ index(logs[i][o]) ขึ้น 1 และลดจำนวนอาร์เรย์ที่ดัชนี (logs[i) ][1]) โดย 1
– อีกครั้ง เราจะเรียกใช้การวนซ้ำจาก 0 ถึงความยาวของอาร์เรย์ และทำการนับตัวแปรก่อนหน้าหนึ่งรายการ และอัปเดตแต่ละองค์ประกอบของอาร์เรย์ตามอาร์เรย์+ก่อนหน้า และอัปเดตก่อนหน้าโดย prev = อาร์เรย์[i]
- ในที่สุด เราจะเรียกใช้ลูปและค้นหาค่าสูงสุดในอาร์เรย์และส่งคืนดัชนีนั้น ๆ (index+1950) ดังนั้นจงหาปีประชากรสูงสุด
รหัส:
โซลูชัน Leetcode Python ของประชากรสูงสุดปี:
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
โซลูชัน 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; } }
การวิเคราะห์ความซับซ้อนของโซลูชัน Leetcode ปีประชากรสูงสุด:
ความซับซ้อนของเวลา
ความซับซ้อนของเวลาของวิธีแก้ปัญหาข้างต้นคือ O(n)
ความซับซ้อนของเวลา
Space Complexity ของวิธีแก้ปัญหาข้างต้นคือ O(1)
เนื่องจากเราได้สร้างอาร์เรย์ของความยาว = 101 ดังนั้นเราสามารถพิจารณาค่าคงที่ได้