LeetCode - 825 - 适龄的朋友 - Java -在作者看来还算细

}

在这里插入图片描述

附图


在这里插入图片描述


解题思维2:

=====================================================================

通过创建一个数组 cur,容量为 121,数组下标 等价于 年龄,下标对应的元素大小,就是处在该年龄的人数。

在这里插入图片描述

然后在创建一个同样大小的数组 prev,每个元素等于 自身前一个元素 加上 在cur中 与 该元素下标对应的元素。

在这里插入图片描述

有的朋友可能看不懂这块代码,简单来说 就是累加赋值:将处于 i 年龄段及其 比 i 年龄段小的人的总和。赋予 数组prev的 i 下标元素,将其值更新为 i 年龄段的人 及其 比 i 小的年龄段的所有人 总和。


接下来就是遍历 cur 数组,如果 有处在 i 年龄的人,也就说 cur[ i ] > 0的。此时,就需要像第一种方法一样,计算出 0.5 * i + 7 的值,也就是 处于 i 年龄的人,所不能接受的最小年龄的界限bound。

而且,请注意! 我们的prev的每个元素,都是对应cur 某一年龄及其以下的人数总和。

此时用 cur[i] 所对应的 prev[[i],就是 该年龄及其以下的人数总和,减去 计算出 0.5 * i + 7 的值,也就是 处于 i 年龄的人,所不能接受的最小年龄的界限bound。

用 prev[ i ] - prev[bound] 的结果:就是 处于 【0.5 * i + 7 < age[y] <= i 】的人数总和,也就是减去的结果都是 比 0.5 * i + 7 的结果 大,也就是说 所有人,都是 i 年龄人 的 交朋友对象。

当然 除了 自己。(不要问什么!题目要求的)

然后,就是把每个 i 年龄的人申请信息条数的一个累加。

最后返回这个累加的结果。

在这里插入图片描述


附上方法二的代码


class Solution {

public int numFriendRequests(int[] ages) {

// 统计每个年龄的人数,将其数组元素化

int[] cur = new int[121];

for(int age : ages){

cur[age]++;

}

//统计每个年龄及其以下的人数总和,将其数组元素化

int[] prev = new int[121];

for(int i = 1; i < 121;i++){

prev[i] = prev[i-1] + cur[i];

}

int result = 0;// 记录最终结果

// 15岁以下不考虑,题目说的,从下标15 开始遍历数组 cur

for(int i = 15; i < 121; i++){

if(cur[i]>0){// 如果有处在 i 年龄的人

int bound = (int)(0.5*i +7);// 计算他们所能接受最小年龄界限

result += cur[i] * (prev[i] - prev[bound]-1);

// 按照题目要求, i 年龄的人,所能接受的最小年龄,至少大于 界限 bound。

// 用 目前 i 年龄及其以下的人数总和 减去 界限 bound的人数总和

// 剩下就都是 比 bound 年龄大的人,且 最大年龄不超过 i 的人

// 再根据题目要求,减去自己,剩下的人就是都 好友申请对象了。

// 当然 处于 i 年龄的人,可能不止一个,所以要乘以一个 cur[i]。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。

image

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

image

image

录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

[外链图片转存中…(img-g1FedSGs-1711760336925)]

[外链图片转存中…(img-AZPCXNbU-1711760336925)]

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值