首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >golang刷leetcode 技巧(40)生存人数

golang刷leetcode 技巧(40)生存人数

作者头像
golangLeetcode
发布2022-08-02 18:48:40
发布2022-08-02 18:48:40
3000
举报

给定N个人的出生年份和死亡年份,第i个人的出生年份为birth[i],死亡年份为death[i],实现一个方法以计算生存人数最多的年份。

你可以假设所有人都出生于1900年至2000年(含1900和2000)之间。如果一个人在某一年的任意时期都处于生存状态,那么他们应该被纳入那一年的统计中。例如,生于1908年、死于1909年的人应当被列入1908年和1909年的计数。

如果有多个年份生存人数相同且均为最大值,输出其中最小的年份。

示例:

代码语言:javascript
复制
输入:
birth = {1900, 1901, 1950}
death = {1948, 1951, 2000}
输出: 1901

提示:

  • 0 < birth.length == death.length <= 10000
  • birth[i] <= death[i]

解题思路

1,这个题目和并行任务数是一样的

2,出生+1,死亡-1

3,关键是继承上一年的sum[i]+=sum[i-1]

4,注意有个坑,1909年死的人应该在1909年还算存活,1910年不算了

代码实现

代码语言:javascript
复制
func maxAliveYear(birth []int, death []int) int {
    sum:=make([]int,102)
    for i:=0;i<len(birth);i++{
        sum[birth[i]-1900]++
    }
    for i:=0;i<len(death);i++{
        sum[death[i]-1899]--
    }
    max:=sum[0]
    maxIndex:=0
    for i:=1;i<102;i++{
        sum[i]+=sum[i-1]
        if sum[i]>max{
            max=sum[i]
            maxIndex=i
        }
    }
    return 1900+maxIndex
    //1909年死的人应该在1909年还算存活,1910年不算了,,没理解好,所以应该是102大小的数组
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档