Lc-825
categories: [LeetCode]
tags: [Array, HashMap, medium]
825. Friends Of Appropriate Ages
题目大意:
给定一个数组, 数组中每个元素代表代表一个人的年龄
返回一共可以发出多少份好友请求,如果满足以下任意一个条件,
则不能发出好友请求
age[B] <= 0.5 * age[A] + 7
age[B] > age[A]
age[B] > 100 && age[A] < 100
注意: 不能向自己发送请求, 如果A向B发送请求,不等于B一定向A发送请求
解题思路:
首先初始化一个Map,key为年龄,value为此年龄的个数
然后用两个for loop循环Map中所有的key,一个代表A的年龄,
一个代表B的年龄,然后对A和B的年龄进行判断是否上述条件都不满足
如果都不满足,说明A可以向B发送好友请求,则ageA和ageB能发出的请求的个数为
count.get(ageA) * (count.get(ageB) - (ageA == ageB ? 1 : 0))
最后返回ans
注意:
复杂度:
Time Coplexity: O(A^2 + N) A is the number of age, N is the number of persons
Space Complexity: O(A)
Code示例:
class Solution {
public int numFriendRequests(int[] ages) {
Map<Integer, Integer> count = new HashMap<>();
for (int a : ages) {
count.put(a, count.getOrDefault(a, 0)+1);
}
int ans = 0;
for (int ageA : count.keySet()) {
for (int ageB : count.keySet()) {
if (helper(ageA, ageB)) {
ans += count.get(ageA) * (count.get(ageB) - (ageA == ageB ? 1 : 0));
}
}
}
return ans;
}
public boolean helper(int ageA, int ageB) {
return !(ageB <= 0.5 * ageA + 7) && !(ageB > ageA)
&& !(ageB > 100 && ageA < 100);
}
}