来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/friends-of-appropriate-ages

题目描述

在社交媒体网站上有 n 个用户。给你一个整数数组 ages ,其中 ages[i] 是第 i 个用户的年龄。

如果下述任意一个条件为真,那么用户 x 将不会向用户 y(x != y)发送好友请求:

age[y] <= 0.5 * age[x] + 7
age[y] > age[x]
age[y] > 100 && age[x] < 100
否则,x 将会向 y 发送一条好友请求。

注意,如果 x 向 y 发送一条好友请求,y 不必也向 x 发送一条好友请求。另外,用户不会向自己发送好友请求。

返回在该社交媒体网站上产生的好友请求总数。

示例 1:

输入:ages = [16,16]
输出:2
解释:2 人互发好友请求。

示例 2:

输入:ages = [16,17,18]
输出:2
解释:产生的好友请求为 17 -> 16 ,18 -> 17 。

示例 3:

输入:ages = [20,30,100,110,120]
输出:3
解释:产生的好友请求为 110 -> 100 ,120 -> 110 ,120 -> 100 。

提示:

n == ages.length
1 <= n <= 2 * 104
1 <= ages[i] <= 120

解题思路

在题目的描述中,x同学想和y同学成为朋友的条件有三个,不难看出条件3是包含在条件2中的,所以我们可以不考虑条件3,因为满足条件2必然会满足条件3,同时需要注意x和y发送好友请求,y并不是一定要和x发送好友请求的,世上没有那么多双向奔赴。

结合条件1和条件2可以得出,x同学得满足一个条件0.5 * ages[x] + 7 < ages[x]。求得x同学的年龄必须是15岁及以上,那么我们可以跳过年龄15岁以下的同学,只有满足15岁及以上的同学才有发送好友请求的能力。

接下来将所有同学的年龄进行升序排序,对于每一个x同学。都可以找到找到一个区间(0.5 * ages[x] + 7, ages[x] ],x同学会向这个区间中的每一个人发送好友请求。所以使用两个指针left和right分别记录这个区间的两个边界。由于0.5*ages[x] + 7 和 ages[x]都是单调递增的,所以x+1同学的区间肯定等于x同学或者位于x同学的右侧,那么left和right的值只需要向右滑动就可以了。求出区间后,需要将自己排除掉,所以需要人数减1,所以right - left 便是x同学发送好友请求的数量。

代码展示

class Solution {
public:
int numFriendRequests(vector<int>& ages) {
int iRet = 0;
sort(ages.begin(), ages.end());
int iLeft = 0, iRight = 0;
for(int i = 0; i < ages.size(); i++)
{
if(ages[i] <= 14)
continue;
while(ages[iLeft] <= 0.5 * ages[i] + 7)
{
iLeft++;
}
while(iRight + 1 < ages.size() && ages[iRight + 1] <= ages[i])
{
iRight++;
}
iRet += iRight - iLeft;
}
return iRet;
}
};

运行结果

LeetCode-825 适龄的朋友的更多相关文章

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

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

  2. [LeetCode] 547. Friend Circles 朋友圈

    There are N students in a class. Some of them are friends, while some are not. Their friendship is t ...

  3. LeetCode 547. Friend Circles 朋友圈(C++/Java)

    题目: https://leetcode.com/problems/friend-circles/ There are N students in a class. Some of them are ...

  4. [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 ...

  5. LeetCode 825. Friends Of Appropriate Ages

    原题链接在这里:https://leetcode.com/problems/friends-of-appropriate-ages/ 题目: Some people will make friend ...

  6. [LeetCode]547. Friend Circles朋友圈数量--不相邻子图问题

    /* 思路就是遍历所有人,对于每一个人,寻找他的好友,找到好友后再找这个好友的好友 ,这样深度优先遍历下去,设置一个flag记录是否已经遍历了这个人. 其实dfs真正有用的是flag这个变量,因为如果 ...

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

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

  8. Swift LeetCode 目录 | Catalog

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

  9. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  10. [LeetCode] 737. Sentence Similarity II 句子相似度 II

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

随机推荐

  1. 一文带你搞懂 Google 发布的新开源项目 GUAC

    随着软件供应链攻击的显著增加,以及 Log4j 漏洞带来的灾难性后果和影响,软件供应链面临的风险已经成为网络安全生态系统共同关注的最重要话题之一.根据业内权威机构 Sonatype 发布的2022软件 ...

  2. 强化学习调参技巧二:DDPG、TD3、SAC算法为例:

    1.训练环境如何正确编写 强化学习里的 env.reset() env.step() 就是训练环境.其编写流程如下: 1.1 初始阶段: 先写一个简化版的训练环境.把任务难度降到最低,确保一定能正常训 ...

  3. 聚焦技术,锐意创新,GaussDB给世界一个更优选择

    摘要:从整个行业应用层面来看,现在,数据库的国产化时代已经到来. 本文分享自华为云社区<聚焦技术,锐意创新,GaussDB给世界一个更优选择>,作者: GaussDB数据库. 今天,以&q ...

  4. Django项目启动 AttributeError: ‘str‘ object has no attribute ‘decode‘ 问题

    Watching for file changes with StatReloader Performing system checks... System check identified no i ...

  5. HTML笨方法仿写站酷

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Redis-01 常用命令

    创建和获取 key 命令 说明 例子 set 创建一个名为 key 值为 value 键值对 set views 10 get 获取名为 key 的值,存在返回值,不存在返回 nil get view ...

  7. Spark框架下均值漂移算法对舆情聚类的分析

    知网链接 原文链接 张京坤,  王怡怡 软件导刊   2022年21卷第6期 页码:141-146 DOI:10.11907/rjdk.211889    中图分类号:TP274 纸质出版日期:202 ...

  8. Linux中的infuxdb安装及数据迁移

    一.安装influxdb 1.更新yum源 cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo   [influxdb]   baseu ...

  9. 【Vue3.0】关于 script setup 语法糖的用法

    script setup - 简介 先来看一看官网关于 <script setup> 的介绍: 要彻底的了解 setup 语法糖,你必须先明确 setup() 这个 组合式API 官网中对 ...

  10. Ubuntu 22.04 安装搜狗输入法

    下载搜狗输入法 下载地址https://shurufa.sogou.com/linux 也可以命令下载 wget https://ime.sogouimecdn.com/202212182151/3b ...