# 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.&#x20;

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: 3
Explanation: Friend requests are made 110 -> 100, 120 -> 110, 120 -> 100.
```

Notes:

* `1 <= ages.length <= 20000`.
* `1 <= ages[i] <= 120`.

```java
class Solution {
    // Three conditions could be merged to one:
    // The Person with age A can request person with age B if
    // B is in range ( 0.5 * A + 7, A ]
    public int numFriendRequests(int[] ages) {
        int res = 0;
        int[] numInAge = new int[121], sumInAge = new int[121];
        // numInAge[i]-> number of people with age=i
        for (int i : ages)
            numInAge[i]++;
        // sumInAge[i] -> number of people with age <= i
        for (int i = 1; i <= 120; ++i)
            sumInAge[i] = numInAge[i] + sumInAge[i - 1];
        // Because 0.5 * i + 7 >= i when i < 15.
        for (int i = 15; i <= 120; ++i) {
            if (numInAge[i] == 0)
                continue;
            int count = sumInAge[i] - sumInAge[i / 2 + 7];
            res += count * numInAge[i] - numInAge[i]; // people will not friend request themselves, so - numInAge[i]
        }
        return res;
    }
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mayanktyagi3111.gitbook.io/interview-prep/strings-arrays-and-2-pointers/friends-of-appropriate-ages.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
