【三元组枚举中点】【树状数组】个人练习-Leetcode-1395. Count Number of Teams
题目链接:https://leetcode.cn/problems/count-number-of-teams/description/
题目大意:给一个数组rating[],求符合以下任一条件的三元组i, j, k的个数
rating[i] < rating[j] < rating[k]rating[i] > rating[j] > rating[k]
其实就是递增和递减。
思路:暴力枚举当然不太行。那么怎么搞定【三元组】呢?【三元组】中,中间的点总是特殊的,可以考虑枚举中点j,然后再在左边枚举i,右边枚举k,找出两边的大于和小于中间点的数量,然后【左小✖️右大 + 左大✖️右小】就是答案。这个枚举i和枚举k是同一层循环内的,因此时间复杂度是 O ( N 2 ) O(N^2) O(N2)
完整代码
class Solution {
public:int numTeams(vector<int>& rating) {int n = rating.size();int ans = 0;for (int j = 1; j < n-1; j++) {int iless = 0, imore = 0;int kless = 0, kmore = 0;for (int i = 0; i < j; i++) {if (rating[i] < rating[j])iless++;else if (rating[i] > rating[j])imore++;}for (int k = j+1; k < n; k++) {if (rating[k] < rating[j])kless++;else if (rating[k] > rating[j])kmore++;}ans += iless * kmore + imore * kless;}return ans;}
};
看了题解还有用树状数组的写法。树状数组建议看这个视频(https://www.bilibili.com/video/BV1ce411u7qP/)了解下,就能明白三个相关函数lowbit(),add(),query(()的作用。
但知道树状数组了,该怎么应用到这个题目呢?题目里可以作为的树状数组arr[]是什么呢?假设有个桶数组bk[],为1表示这个下标的数字出现过,为0表示没出现过。然后对这个桶数组求前缀和得到一个数组,这个数组就是arr[]。在遍历rating[]的时候,每次遍历都会更新这个arr[],这样就可以知道,在某个位置j左边小于rating[j]的数目,也就是潜在的iless。对于k,则倒过来再算一遍。由此可以记录iless, imore, kless, kmore。用和前面相同的方法计算即可。
完整代码
class Solution {
public:static constexpr int MAXN = 1001;int arr[MAXN];vector<int> disc;vector<int> iless, imore, kless, kmore;// aux funcinline int lowbit(int x) {return x & (-x);}// add val to arr[pos]void add(int pos, int val) {while (pos < MAXN) {arr[pos] += val;pos += lowbit(pos);}}int query(int pos) {int res = 0;while (pos > 0) {res += arr[pos];pos -= lowbit(pos);}return res;}int numTeams(vector<int>& rating) {disc = rating;disc.emplace_back(-1);sort(disc.begin(), disc.end());auto getId = [&] (int target) {return lower_bound(disc.begin(), disc.end(), target) - disc.begin();};int n = rating.size();int ans = 0;iless.resize(n);imore.resize(n);kless.resize(n);kmore.resize(n);// forwardfor (int j = 0; j < n; j++) {auto id = getId(rating[j]);iless[j] = query(id);imore[j] = query(MAXN-1) - query(id);add(id, 1);}// reset arr to zeromemset(arr, 0, sizeof arr);// backwardfor (int j = n-1; j >= 0; j--) {auto id = getId(rating[j]);kless[j] = query(id);kmore[j] = query(MAXN-1) - query(id);add(id, 1);}for (int i = 0; i < n; i++) {ans += iless[i] * kmore[i] + imore[i] * kless[i];}return ans;}
};
相关文章:
【三元组枚举中点】【树状数组】个人练习-Leetcode-1395. Count Number of Teams
题目链接:https://leetcode.cn/problems/count-number-of-teams/description/ 题目大意:给一个数组rating[],求符合以下任一条件的三元组i, j, k的个数 rating[i] < rating[j] < rating[k]rating[i] > rating[j] > rating[k] …...
Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法
最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如…...
数据库系统 第51节 数据库事务管理
数据库事务管理是数据库管理系统(DBMS)中用于确保数据完整性和一致性的一组机制。事务是一组不可分割的操作序列,这些操作要么全部成功,要么全部失败。以下是数据库事务管理的关键组成部分的详细叙述: 1. 事务隔离级别…...
分解+优化+组合+对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测
分解优化组合对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测 目录 分解优化组合对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.…...
二十三种设计模式之建造者模式(类比汽车制造厂好理解一些)
目录 1. 设计模式的分类 2. 定义 3. 建造者模式通常包含以下几个角色 4. 示例代码 5. 建造者模式的主要优点 1. 设计模式的分类 创建型模式(五种):工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式。 结构型模式(七种):适配器模式、代…...
macos 系统文件操作时提示 Read-only file system 解决方法
这个情况是因为文件系统为只读, 需要我们执行一下命令重新将系统文件挂载为读写模式, 命令如下: sudo mount -uw / 这里的 mount 就是硬盘挂载命令, 后面的 -uw选项说明如下, 最后的 / 表示的是跟目录, 可以指定要修改的挂载路径,也可以默认. -u -u标志表示应更改已装载文…...
银行业务架构指导应用架构规划及设计方法
摘要 业务架构指导应用架构设计方法是指依托业务架构设计成果,开展应用架构应用划分设计、IT服务分层设计和数据模型设计的方法。通过业务架构指导应用架构设计,以IT研发项目驱动的方式,由IT系统落地业务架构设计成果,实现对业务流程快速拼接和产品灵活配置的支持,从而提升…...
最全面IO流介绍
1.字符集介绍 标准ASCII字符集:使用1个字节存储一个字符,首尾是0,总可以表示128个字符。是美国信息交换标准代码,包含英文、符号等等。 GBK汉字编码字符集,包含2万多个汉字等字符,GBK中一个中文字符编码成…...
fastadmin 文件上传腾讯云
1-安装腾讯云SDK composer require qcloud/cos-sdk-v5 2-腾讯云配置 <?phpnamespace app\common\controller;use Qcloud\Cos\Client; use think\Controller; use think\Db;class Tencent extends Controller {/*** 上传文件* param $config* param $key* return array*/p…...
《机器学习》—— PCA降维
文章目录 一、PCA降维简单介绍二、python中实现PCA降维函数的介绍三、代码实现四、PCA降维的优缺点 一、PCA降维简单介绍 PCA(主成分分析,Principal Component Analysis)是一种常用的数据降维技术。它通过线性变换将原始数据转换到新的坐标系…...
植物三萜皂苷生物合成途径及调控机制研究进展-文献精读48
摘要 三萜皂苷(triterpenoids saponins)是由三萜皂苷元和一个或多个糖基和/或其他化学基团缩合而成的一系列结构多样的天然化合物[1], 主要分布在五加科、蝶形花科、石竹科、桔梗科、毛茛科、玄参科、葫芦科等植物中[2]. 植物中三萜皂苷常分布在特定的器官和组织, 如人参(Pana…...
server 2016搭建FTP服务
目录 一、实验环境 二、在server 2016上面安装FTP服务 三、在server 2016上面配置FTP服务 四、创建用户(也可创建用户组,给用户组赋予权限) 一、实验环境 windows server 2016用于安装ftp服务 windows 10作为客户端进行测试。 二、在s…...
物理学基础精解【4】
文章目录 运动和力质点运动机械运动的参考系运动的相对性运动学中坐标系 参考文献 运动和力 质点运动 一个物体相对于另一个物体的位置或一个物体的某些部分相对于其他部分的位置 ,随着时间而变化的过程,叫机械运动 。质点是一个物理学中的理想化模型&…...
【区块链 + 人才服务】Blockchain Workshop- 区块链编程实践平台 | FISCO BCOS应用案例
Blockchain Workshop v2.0(以下简称 BCW v2.0)是点宽网络科技有限公司升级的全新区块链实践教育平台产品。 BCW v2.0 区块链实践教育平台面向高校区块链专业人才培养,用于区块链专业技术学习和智能合约编程学习,平台基于 FISCO BC…...
Java面试篇基础部分-Java中常用的I/O模型
阻塞I/O模型 阻塞式的I/O模型是一种非常常见的I/O模型机制,在进行数据读写操作的时候,客户端会发生阻塞等待。 工作流程如图所示,该用户线程一直阻塞,等待内存中的数据就绪;内存中的数据就绪之后,内核态的数据将拷贝到用户线程中,并且返回I/O的执行结果到用户线程。这个…...
如何使用python运行Flask开发框架并实现无公网IP远程访问
文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask,以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语…...
第三届828 B2B企业节开幕,大腾智能携手华为云共谱数字化新篇章
8月27日,由华为携手上万家伙伴共同发起的第三届828 B2B企业节在贵州正式开幕。 本届企业节推出上万款数智产品,600多个精选解决方案,旨在融通数智供需,加速企业智改数转,助推中国数智产业实力再升级。中共贵州省委副书…...
Linux网络编程IO管理
网络 IO 涉及到两个系统对象,一个是用户空间调用 IO 的进程或者线程,一个是内核空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段: 等待内核协议栈的数据准备就绪;将内核中的数据拷贝到用户态的…...
SpringCloud集成ELK
1、添加依赖 <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.1</version> </dependency>2、在logback-spring.xml中添加配置信息(logback-sp…...
【卷起来】VUE3.0教程-06-组件详解
各位看官,点波关注和赞吧 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构: 这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的…...
QMCDecode终极指南:3步破解QQ音乐加密格式,实现音频自由播放
QMCDecode终极指南:3步破解QQ音乐加密格式,实现音频自由播放 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录…...
用Python脚本让Crazyflie 2.X无人机动起来:手把手教你写第一个自主飞行程序
用Python脚本让Crazyflie 2.X无人机动起来:从零编写自主飞行程序 当第一次看到Crazyflie这个巴掌大的无人机在桌面上悬停时,我意识到微小型飞行器的编程控制远比想象中更有趣。与传统无人机不同,Crazyflie 2.X系列通过Python脚本就能实现毫米…...
Fun-ASR-MLT-Nano-2512在教育培训场景的应用:语音课件自动转写
Fun-ASR-MLT-Nano-2512在教育培训场景的应用:语音课件自动转写 1. 技术背景与教育痛点 1.1 教育培训行业的语音处理需求 教育培训行业每天产生大量语音内容,包括教师授课录音、在线课程音频、学生互动语音等。传统的人工转写方式面临三大核心痛点&…...
新手避坑指南:雯雯的后宫-造相Z-Image-瑜伽女孩镜像部署全流程解析
新手避坑指南:雯雯的后宫-造相Z-Image-瑜伽女孩镜像部署全流程解析 1. 镜像概述与核心价值 雯雯的后宫-造相Z-Image-瑜伽女孩是一个专注于生成高质量瑜伽主题图像的文生图模型服务。基于Z-Image-Turbo底座并结合特定LoRA微调技术,该镜像能够生成风格统…...
C# Enumerable类 之 高效数据转换实战指南
1. 为什么需要数据转换? 在C#开发中,我们经常会遇到需要处理不同类型数据集合的场景。比如从数据库读取的数据可能是object类型,或者老项目中还在使用非泛型的ArrayList。这时候就需要将这些"原始"数据转换成我们需要的特定类型&am…...
NPU加速!DeepSeek-V3大模型极速体验攻略
NPU加速!DeepSeek-V3大模型极速体验攻略 【免费下载链接】DeepSeek-V3-0324-w4a8-mtp-QuaRot 项目地址: https://ai.gitcode.com/Eco-Tech/DeepSeek-V3-0324-w4a8-mtp-QuaRot 导语:DeepSeek-V3系列大模型推出NPU硬件加速版本,标志着大…...
零基础玩转Qwen-Image-Edit-2511-Unblur-Upscale:模糊图片秒变清晰
零基础玩转Qwen-Image-Edit-2511-Unblur-Upscale:模糊图片秒变清晰 你是否遇到过这样的烦恼?手机里珍藏的老照片因为年代久远变得模糊不清,或者抓拍的精彩瞬间因为手抖而糊成一片。又或者,你从网上下载了一张心仪的图片ÿ…...
Mac Mouse Fix终极指南:重新定义macOS鼠标交互体验的开源解决方案
Mac Mouse Fix终极指南:重新定义macOS鼠标交互体验的开源解决方案 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 在macOS生态系统中࿰…...
百川2-13B-4bits量化模型精度实测:在OpenClaw复杂任务中的表现
百川2-13B-4bits量化模型精度实测:在OpenClaw复杂任务中的表现 1. 测试背景与实验设计 去年冬天第一次接触量化模型时,我曾天真地认为"4bits精度损失可以忽略不计"。直到用OpenClaw执行跨平台内容发布任务时,一个错误的文件路径让…...
实战应用:从零到一,使用快马构建资料更新内容管理系统的完整案例
实战应用:从零到一,使用快马构建资料更新内容管理系统的完整案例 最近接手了一个资料大全的版本更新管理需求,需要搭建一个简单高效的内容管理系统。经过一番摸索,我发现用InsCode(快马)平台可以快速实现这个功能,整个…...
