来源:力扣(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. 【Java】【数据库】B树

    B-树的形式 (B-树就是B树, 而且'-'是一个连接符号,不是减号.) B树的结构如下 不同于B+树(关于B+树,我的这篇博客里有写:B+树)的一些特点: 数据 \(K_i\) 左边的树不会将 \( ...

  2. 第二章 --------------------XAML基础

    1.XAML是什么? XAML是扩展标记语言,是为了方便设计人员设计UI界面.具体关于XAML语法的讲解参考其他相关书籍.  XAML每一个标签以<>开头,以</>结尾,作为标 ...

  3. vulnhub靶场之IA: KEYRING (1.0.1)

    准备: 攻击机:虚拟机kali.本机win10. 靶机:IA: KEYRING (1.0.1),下载地址:https://download.vulnhub.com/ia/keyring-v1.01.o ...

  4. C#开发的资源文件程序(可国际化) - 开源研究系列文章

    上次将小软件的线程池描述了,也将插件程序描述了,这次就将里面的资源文件相关的内容进行下记录,这里能够让程序做成国际化的形式(即多语言程序),主要就是通过这个资源文件的方式进行的处理.下面将对这个资源文 ...

  5. 多目标优化经典算法——NSGA-II

    参考博客链接 https://blog.csdn.net/qq_35414569/article/details/79639848?utm_medium=distribute.pc_relevant. ...

  6. 迷宫机器人最短路径使用tkinter绘制

    起因 我想要写一个玩家和机器对战的迷宫游戏.这个项目我没有写完,我实现了最短机器人路径并绘制在tkinter上,以及玩家移动的功能.更多的关于GUI的设计太花时间了我没有写完. 算法介绍 我在写机器人 ...

  7. 疯狂吐槽 MAUI 以及 MAUI 入坑知识点

    目录 窗口 窗口管理 如何限制一次只能打开一个程序 MAUI 程序安装模式 为 MAUI Blazor 设置语言 坑 ① 坑 ② 坑 ③ 配置 MAUI 项目使用管理员权限启动 问题背景 定制编译过程 ...

  8. CentOS7下配置使用JumpServer 堡垒机 (图文教程)

    前面介绍了如何在<CentOS7下搭建JumpServer 堡垒机>,基于这篇文章的环境搭建过程,接着介绍安装后的的功能配置使用. 首次wbe登录,https://ip:80,默认账号密码 ...

  9. 腾讯出品小程序自动化测试框架【Minium】系列(二)项目配置及测试套件使用说明

    一.写在前面 真的人这一散漫惯了,收心就很难了,上午把小程序开发环境启动后,在QQ游戏里,杀了三把象棋,5把2D桌球,一上午没了,还是没法心静下来去学点东西. 那就老样子,逼着自己开始,找到 &quo ...

  10. pycham debug 专辑

    遇到大量代码的项目时怎么迅猛的调代码今天将交给大家几个方法 配置环境: 环境的统一是一切的基础,因为不同的版本不同步之间会造成很多各式各样的报错 然后选择现有环境进行配置 上面的路径进行默认环境变量的 ...