原题链接在这里:https://leetcode.com/problems/friends-of-appropriate-ages/

题目:

Some people will make friend requests. The list of their ages is given and ages[i] is the age of the ith person.

Person A will NOT friend request person B (B != A) if any of the following conditions are true:

  • age[B] <= 0.5 * age[A] + 7
  • age[B] > age[A]
  • age[B] > 100 && age[A] < 100

Otherwise, A will friend request B.

Note that if A requests B, B does not necessarily request A.  Also, people will not friend request themselves.

How many total friend requests are made?

Example 1:

Input: [16,16]
Output: 2
Explanation: 2 people friend request each other.

Example 2:

Input: [16,17,18]
Output: 2
Explanation: Friend requests are made 17 -> 16, 18 -> 17.

Example 3:

Input: [20,30,100,110,120]
Output:
Explanation: Friend requests are made 110 -> 100, 120 -> 110, 120 -> 100.

Notes:

  • 1 <= ages.length <= 20000.
  • 1 <= ages[i] <= 120.

题解:

Accumlate the frequency of different ages.

If age a and age b could send request, and a != b, then res += a freq * b freq.

If a == b, since no one could send friend request to themselves, the request is a freq * (a freq - 1). Send friend request to other people with same age.

Time Complexity: O(n^2). n = ages.length.

Space: O(n).

AC Java:

 class Solution {
public int numFriendRequests(int[] ages) {
if(ages == null || ages.length == 0){
return 0;
} HashMap<Integer, Integer> hm = new HashMap<>();
for(int age : ages){
hm.put(age, hm.getOrDefault(age, 0) + 1);
} int res = 0;
for(int a : hm.keySet()){
for(int b : hm.keySet()){
if(couldSendRequest(a, b)){
res += hm.get(a) * (hm.get(b) - (a == b ? 1 : 0));
}
}
} return res;
} private boolean couldSendRequest(int a, int b){
return !(b <= a*0.5 + 7 || b > a || (b > 100 && a < 100));
}
}

With 3 conditions, we only care the count of B in range (a/2+7, a].

Get the sum count of b and * a count - a count since people can't sent friend request to themselves.

Since A > B >= 0.5*A+7, A > 0.5*A+7. Then A>14. Thus i is started from 15.

Time Complexity: O(n).

Space: O(1).

AC Java:

 class Solution {
public int numFriendRequests(int[] ages) {
if(ages == null || ages.length == 0){
return 0;
} int [] count = new int[121];
for(int age : ages){
count[age]++;
} int [] sum = new int[121];
for(int i = 1; i<121; i++){
sum[i] = sum[i-1] + count[i];
} int res = 0;
for(int i = 15; i<121; i++){
if(count[i] == 0){
continue;
} int bCount = sum[i] - sum[i/2+7];
res += bCount * count[i] - count[i];
} return res;
}
}

LeetCode 825. Friends Of Appropriate Ages的更多相关文章

  1. 【LeetCode】825. Friends Of Appropriate Ages 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/friends-o ...

  2. Java实现 LeetCode 825 适龄的朋友(暴力)

    825. 适龄的朋友 人们会互相发送好友请求,现在给定一个包含有他们年龄的数组,ages[i] 表示第 i 个人的年龄. 当满足以下条件时,A 不能给 B(A.B不为同一人)发送好友请求: age[B ...

  3. 825. Friends Of Appropriate Ages有效的好友请求的数量

    [抄题]: Some people will make friend requests. The list of their ages is given and ages[i] is the age ...

  4. All LeetCode Questions List 题目汇总

    All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...

  5. [LeetCode] Friends Of Appropriate Ages 适合年龄段的朋友

    Some people will make friend requests. The list of their ages is given and ages[i] is the age of the ...

  6. Leetcode题解 - 部分中等难度算法题解(56、957、825、781、1324、816)

    957. N 天后的牢房 思路: 模拟变换,当N天结合后返回 => 当N非常大的时候,超时 => 一般N很大的时候,这种题目必然存在循环,所以记录找过的状态,一旦出现已经访问过的状态可立即 ...

  7. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  8. [Swift]LeetCode825. 适龄的朋友 | Friends Of Appropriate Ages

    Some people will make friend requests. The list of their ages is given and ages[i] is the age of the ...

  9. 【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)

    Contest 81 (2018年11月8日,周四,凌晨) 链接:https://leetcode.com/contest/weekly-contest-81 比赛情况记录:结果:3/4, ranki ...

随机推荐

  1. Mysql系列(十)—— 性能分析工具profiling

    转载自:http://www.ywnds.com/?p=8677 explain是从mysql怎样解析执行sql的角度分析sql优劣.profiling是从sql执行时资源使用情况的角度来分析sql. ...

  2. Ubuntu Nginx https 配置

    #配置http跳转到https 80跳转443server { listen ; server_name www.***.com www.***.cn; https://$server_name$re ...

  3. C#获取剪切板的内容

    // GetDataObject获取当前剪贴板上的数据 IDataObject data = Clipboard.GetDataObject(); // 将数据与指定的格式进行匹配,返回bool if ...

  4. .Net IOC框架入门之——Unity

    一.概述 IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一 ...

  5. java--String与int相互转换

    字符串与int类型的互相转换 String ---> int //方式一:Integer(String s) //demo: Integer i = new Integer("10&q ...

  6. maven 学习---Maven启用代理访问

    如果你的公司正在建立一个防火墙,并使用HTTP代理服务器来阻止用户直接连接到互联网.如果您使用代理,Maven将无法下载任何依赖. 为了使它工作,你必须声明在 Maven 的配置文件中设置代理服务器: ...

  7. python3高阶函数

    高阶函数英文叫Higher-order function. 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码: >>> abs(-10) 10 ...

  8. current transaction is aborted, commands ignored until end of transaction block

    current transaction is aborted, commands ignored until end of transaction block Error updating datab ...

  9. windows环境下基于nginx搭建rtmp服务器

    基于nginx搭建rtmp服务器需要引入rtmp模块,引入之后需重新编译nginx linux环境几个命令行就能实现编译,笔者未尝试,网上有很多教程. windows环境还需要安装一系列的编译环境,例 ...

  10. Linux自有服务(2)-Linux从入门到精通第六天(非原创)

    文章大纲 一.设置主机名二.chkconfig三.ntp服务四.防火墙服务五.rpm管理(重点)六.cron/crontab计划任务(重点)七.学习资料下载八.参考文章   自有服务,即不需要用户独立 ...