【程序员面试金典】面试题 16.10. 生存人数

【程序员面试金典】面试题 16.10. 生存人数

题目描述

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

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

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

示例:

输入:
birth = [1900, 1901, 1950]
death = [1948, 1951, 2000]
输出: 1901

提示:

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

解题思路

思路1:最直观的想法是,差分数组。由于所有人都出生在1900年至2000年,即一共101年,但是由于要处理后一年,故差分数组大小设置为102。假设一开始所有年份人数均一样,那么差分数组值均为0。出生到死亡则表示这个区间所有人数均需要加一,利用差分数组的性质则是出生年份人数加一且死亡年份后一年份人数减一,那么差分数组前缀和即表示原数组中每一年份的人数。

int maxAliveYear(vector<int>& birth, vector<int>& death) 
{
  //差分数组:出生年份1900~2000共101年 但是需要处理后一年 故101+1
  vector<int> diff(102,0);
  //假设一开始所有年份人数均一样那么差分数组值就为0
  //出生到死亡则表示这个区间所有人数均需要加一
  //利用差分数组的性质则是出生年份人数加一死亡年份后一年人数减一
  //差分数组前缀和即表示原数组中每一年份的人数
  for(int i=0;i<birth.size();i++)
  {
      diff[birth[i]-1900]++;
      diff[death[i]-1900+1]--;
  }
  //第一个单独处理
  int maxn=0;  //最大生存人数
  int curn=0; //当前生存人数
  int id=1900;  //年份下标
  //遍历1900~2000
  for(int i=0;i<diff.size()-1;i++)
  {
     curn+=diff[i];
     if(curn>maxn)
     {
       maxn=curn;
       id=i+1900;
     }
  }
  return id;
}

总结:差分数组指的是将一个数组中后一项减去前一项形成的新数组。比如原数组为[5,4,7,2,4,3,1],差分数组则为[5,-1,3,-5,2,-1,-2],注意,差分数组计算公式为diffi=ai-ai-1,故第一项为a0。差分数组的性质之一就是差分数组求前缀和结果等于原数组,注意,前缀和计算公式为prefix=[0,i]。差分数组主要用于对数组部分区间进行同时加上或减去一个数。为了达到使a[n]~a[m]区间进行加加减减,需要对a[m+1]进行相反的加加减减,对a[n]进行相同的加加减减即可。比如需要对数组下标从1~4的元素同时加一,最直观的想法是,从下标1一直遍历到下标4,使a[i]++,那么随着下标范围变大,这样复杂度可能会高达O(n),如果使用差分数组则只需要两次操作即可,即复杂度优化为O(2)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要安装node 16.10.0的exe版本,您可以按照以下步骤进行操作: 1. 首先,您需要从node.js官方网站上下载安装包。您可以在https://nodejs.org/en/download/找到相应版本的exe安装程序。 2. 一旦您下载了exe安装程序,双击运行该安装程序。 3. 运行安装程序时,您将看到一个欢迎界面,您可以点击“下一步”继续安装。 4. 在接下来的界面中,您将被要求选择安装路径。您可以选择默认路径,也可以选择您喜欢的其他路径。选择完毕后,点击“下一步”。 5. 接下来,您将看到一个组件选择界面。默认已经选择了Node.js核心组件,您可以根据需要选择其他组件。当您选择完毕时,点击“下一步”。 6. 在随后的界面中,您将看到一个选择附加任务的界面。您可以选择创建快捷方式、自动运行安装程序等附加任务。选择完毕后,点击“下一步”。 7. 现在,您将进入安装过程的最后一步,即概述界面。在该界面上,您可以查看您选择的设置和安装位置。确认无误后,点击“安装”开始安装。 8. 安装过程可能需要一些时间,取决于您的计算机性能和网络速度。 9. 安装完成后,您会看到一个安装成功的界面。您可以选择启动Node.js,然后点击“完成”来完成安装。 10. 现在,您已经成功安装了Node.js 16.10.0的exe版本。您可以通过在命令行中输入“node -v”来验证安装是否成功,如果成功安装,将显示Node.js的版本号。 ### 回答2: 要安装Node.js v16.10.0 exe版本,您可以按照以下步骤进行操作: 1. 首先,前往Node.js官网(https://nodejs.org/zh-cn/)下载页面,在该页面上找到Node.js v16.10.0的下载链接。 2. 点击下载链接,会弹出一个窗口,您可以选择合适的操作系统和体系结构(32位或64位)。 3. 在选择完操作系统和体系结构后,点击“下载”按钮开始下载Node.js安装程序的exe文件。 4. 下载完成后,找到下载的exe文件,双击运行该文件。 5. 出现安装向导窗口后,按照指示一步一步进行安装。可以使用默认的安装选项,也可以根据个人需要进行自定义设置。 6. 在安装过程中,可能需要选择Node.js的安装路径。您可以选择默认的路径,也可以选择自定义的安装路径。 7. 待安装完成后,点击“完成”按钮退出安装向导。 8. 现在,您已经成功安装了Node.js v16.10.0的exe版本。您可以在命令行终端或开发环境中使用node命令来验证安装是否成功,输入“node -v”命令,如果能正确显示版本号“v16.10.0”,说明安装成功。 希望以上回答对您有所帮助!如果还有其他问题,请随时提问。 ### 回答3: 要安装 Node.js 的 exe 版本(即可执行文件版本),首先需要前往 Node.js 的官方网站(https://nodejs.org)进行下载。 在网站的首页上,可以看到两个不同的版本供选择:Current 和 LTS。Current 版本是最新的发布版本,而 LTS 版本是长期支持版本。对于大多数用户来说,建议选择安装 LTS 版本,因为它相对稳定且成熟。 点击相应的版本后,会跳转到页面底部的下载选项。根据你的操作系统,选择合适的安装包。对于 Windows 用户,选择 Windows Installer 相关的 exe 文件进行下载。 下载完成后,双击 exe 文件来启动安装程序。选择你想要安装 Node.js 的目录,一般默认安装在 C:\Program Files\nodejs。 在安装过程中,可以根据个人需求选择不同的选项。一般来说,我们可以保持默认设置进行安装,除非有特殊要求。 安装完成后,可以通过打开命令提示符或 Power Shell 并输入 node -v 命令来验证安装是否成功。如果安装成功,会显示 Node.js 的版本号,比如 v16.10.0。 值得注意的是,在 Windows 系统上,安装 Node.js 还会自动安装 npm(即 Node Package Manager),它是 Node.js 的包管理工具,可以用于安装、升级和管理各种 JavaScript 包和库。 总结起来,安装 Node.js 的 exe 版本只需几个简单的步骤:下载 exe 文件、运行安装程序、选择安装目录和验证安装是否成功。安装成功后,就可以通过命令提示符或 Power Shell 运行 Node.js 相关的命令了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值