각 행이 i번째 사람의 출생 및 사망 연도를 나타내는 두 개의 열(출생, 사망)이 있는 테이블이 있다고 가정합니다. 어떤 연도 y의 인구는 y 동안 생존한 사람의 수입니다. i번째 사람은 y가 포함 범위 [birth_i, death_i - 1]에 있을 때 y의 인구로 계산됩니다. (사람은 사망한 해에 계산되지 않습니다.) 따라서 인구가 가장 많은 가장 빠른 해를 찾아야 합니다.
따라서 입력이 다음과 같으면
출생 | 죽음 |
1970년 | 2010년 |
1960년 | 2020년 |
1940 | 1970년 |
대상과 일치하는 값이 하나만 있기 때문에 출력은 2가 됩니다. 즉, nums[4]이므로 i =4입니다. 이제 |4-2| =2.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
d :=어떤 키가 발견되지 않으면 0을 반환하는 맵
-
res :=항목이 두 개인 목록 [2051, 0]
-
매트릭스의 출생 연도 YOB 및 사망 연도 YOD에 대해 다음을 수행하십시오.
-
YOB에서 YOD까지의 연도에 대해 수행
-
d[년] :=d[년] + 1
-
d[년]>=res[1]이면
-
d[년]> res[1]이면
-
res :=두 개의 요소가 있는 목록 [year, d[year]]
-
-
그렇지 않으면
-
res :=두 개의 요소가 있는 목록 [(연도 및 res[0]의 최소값), res[1]]
-
-
-
-
-
반환 해상도[0]
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from collections import defaultdict def solve(matrix): d = defaultdict(int) res = [2051, 0] for YOB, YOD in matrix: for year in range(YOB, YOD): d[year] += 1 if d[year] >= res[1]: if d[year] > res[1]: res = [year, d[year]] else: res = [min(year, res[0]), res[1]] return res[0] matrix = [[1970,2010],[1960,2020],[1940,1970]] print(solve(matrix))
입력
[[1970,2010],[1960,2020],[1940,1970]]
출력
1960