【C++排序 双指针】1996. 游戏中弱角色的数量|1996
本文涉及的基础知识点
排序
C++算法:滑动窗口及双指针总结
本题其它解法
【C++单调栈 排序】1996. 游戏中弱角色的数量|1996
LeetCode1996. 游戏中弱角色的数量
你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。
如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色 i 弱于 存在的另一个角色 j ,那么 attackj > attacki 且 defensej > defensei 。
返回 弱角色 的数量。
示例 1:
输入:properties = [[5,5],[6,3],[3,6]]
输出:0
解释:不存在攻击和防御都严格高于其他角色的角色。
示例 2:
输入:properties = [[2,2],[3,3]]
输出:1
解释:第一个角色是弱角色,因为第二个角色的攻击和防御严格大于该角色。
示例 3:
输入:properties = [[1,5],[10,4],[4,3]]
输出:1
解释:第三个角色是弱角色,因为第二个角色的攻击和防御严格大于该角色。
提示:
2 <= properties.length <= 105
properties[i].length == 2
1 <= attacki, defensei <= 105
排序+双指针
i从大到小处理第i个角色,attack[j] > attack[i],且j最小。
maxDefen 是defen[j…n-1]的最大值。
由于attack是升序,如果attack[j] > attack[i]。
性质一:x > j ,则attack[x] > attack[i]。
性质二:x < j ,attack[j-1] <= attack[i],则attack[x] <= attack[j]。
根据性质一和性质二:有且只有 [j…n-1]的攻击大于i。
性质三:x < i → \rightarrow → attack[x] < attack[j]。 ⟺ \iff ⟺ 随着i变小j,不会被移除。
时间复杂度:O(nlogn) 瓶颈在排序
代码
核心代码
class Solution {public:int numberOfWeakCharacters(vector<vector<int>>& properties) {sort(properties.begin(), properties.end());int maxD = 0;const int N = properties.size();int ans = 0;for (int i = N - 1, j = N; i >= 0; i--) {while (j && (properties[j-1][0] > properties[i][0])) {maxD = max(maxD, properties[--j][1]);}ans += properties[i][1] < maxD;}return ans;}};
单元测试
vector<vector<int>> properties;TEST_METHOD(TestMethod11){properties = { {5,5},{6,3},{3,6} };auto res = Solution().numberOfWeakCharacters(properties);AssertEx(0, res);}TEST_METHOD(TestMethod12){properties = { {2,2},{3,3} };auto res = Solution().numberOfWeakCharacters(properties);AssertEx(1, res);}TEST_METHOD(TestMethod13){properties = { {1,5},{10,4},{4,3} };auto res = Solution().numberOfWeakCharacters(properties);AssertEx(1, res);}TEST_METHOD(TestMethod14){properties = { {1,1},{2,1},{2,2},{1,2} };auto res = Solution().numberOfWeakCharacters(properties);AssertEx(1, res);}

扩展阅读
| 我想对大家说的话 |
|---|
| 工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。 |
| 学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作 |
| 有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注 |
| 闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。 |
| 子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。 |
| 如果程序是一条龙,那算法就是他的是睛 |
| 失败+反思=成功 成功+反思=成功 |
视频课程
先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176
测试环境
操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

相关文章:
【C++排序 双指针】1996. 游戏中弱角色的数量|1996
本文涉及的基础知识点 排序 C算法:滑动窗口及双指针总结 本题其它解法 【C单调栈 排序】1996. 游戏中弱角色的数量|1996 LeetCode1996. 游戏中弱角色的数量 你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个…...
GESP4级考试语法知识(捕捉异常)
参考程序代码: #include <iostream> using namespace std;double divide(double a, double b) {if (b 0) {throw "Division by zero error"; // 抛出异常}return a / b; }int main() {double num1, num2;cout << "Enter two numbers:…...
HTML 基础标签——元数据标签 <meta>
文章目录 1. `<meta>` 标签概述2. 属性详解2.1 `charset` 属性2.2 `name` 属性2.3 `content` 属性2.4 `http-equiv` 属性3. 其他常见属性小结在 HTML 文档中,元数据标签 <meta> 是一种重要的标签,用于提供关于文档的信息,这些信息不直接显示在网页内容中,但对于…...
栈虚拟机和寄存器虚拟机,有什么不同?
本来这节内容是打算直接讲字节码指令的,但讲之前又必须得先讲指令集架构,而指令集架构又分为两种,一种是基于栈的,一种是基于寄存器的。 那不妨我们这节就单独来讲讲栈虚拟机和寄存器虚拟机,它们有什么不同࿰…...
Windows下基于fping进行批量IP测试
fping是Linux下一个很好用的IP测试工具,结合代码可以完成批量的IP测试,在网络调试中用途很广。本文是基于fping for Windows结合bat批处理,定制的测试脚本样例。 一、程序信息 本次测试使用fpingV5.1 for Windows版,版本信息如下…...
一款实用的Word文档图片转换与水印保护工具
目录 前言软件功能简介软件实现方法及关键代码 1. Word 文档转图片的实现2. 图片水印添加功能3. 生成数字指纹(哈希值)4. 保存图片信息到 JSON 文件 软件的实际使用场景软件操作指南 1. 下载和安装2. 操作流程 总结 1,前言 在日常办公和内…...
优化用于传感应用的衬底集成波导技术
ANSYS HFSS 是一款功能强大的电磁仿真软件,支持为微流体生物传感器应用设计和分析衬底集成波导 (SIW) 技术。它为快速设计优化、材料选择、系统集成和虚拟原型制作提供了一个强大的平台。借助 ANSYS HFSS,研究人员和工程师可以高效…...
Java多态特性的向上转型
Java的多态特性通过向上转型来实现。向上转型指的是将子类对象赋值给父类引用变量的操作。这样做的好处是可以使用父类引用变量来调用子类对象的方法。 例如,有一个父类Animal和一个子类Dog,可以这样进行向上转型: Animal animal new Dog(…...
C++ 判断语句的深入解析
C 判断语句的深入解析 C 是一种广泛使用的编程语言,以其高效性和灵活性著称。在 C 中,判断语句是控制程序流程的关键组成部分,它们允许程序根据不同的条件执行不同的代码路径。本文将深入探讨 C 中的判断语句,包括 if、else if、…...
15分钟学 Go 第 33 天:项目结构
第33天:项目结构 目标:了解Go项目的典型结构 在Go语言的开发中,项目结构的合理性直接影响着代码的可维护性、可扩展性和团队协作效率。本篇文章将深入探讨Go语言的典型项目结构,并提供实际示例代码和相关的流程图。 一、Go项目…...
conda迁移虚拟环境路径
方法一:使用软连接 ln -s ~/Anaconda3/envs /new/path/envs 方法二:修改~/.condarc文件 1.打开~/.condarc文件 #添加下面参数 envs_dirs: - /newpath/anaconda3/envs pkgs_dirs: - /newpath/anaconda3/pkgs 2. source ~/.bashrc 3.查看是否成功con…...
(八)JavaWeb后端开发——Tomcat
目录 1.Web服务器概念 2.tomcat 1.Web服务器概念 服务器:安装了服务器软件的计算机服务器软件:接收用户的请求,处理请求,做出响应web服务器软件:在web服务器软件中,可以部署web项目,让用户通…...
yocto中通常不直接修改提供的recipes的bb文件
不直接在 Yocto 官方提供的 recipe 中修改 通常是创建新的 metadata 和 recipe 来配置相关软件编译等过程 主要有以下几个原因: 1. 便于维护和升级 隔离自定义修改:Yocto 官方的 recipe 可能会随着版本更新而变化。如果直接修改官方 recipe࿰…...
智能座舱相关术语全解及多模态交互在智能座舱中的应用
文章目录 座舱相关术语全解1. 智能座舱2. UFS3. 多模态交互4. 3D虚拟引擎5. AR/VR6. GNSS7. TTS8. DPU9. 摄像头10. 屏幕/显示器11. 音频12. 无线连接13. 其他组件 多模态交互在智能座舱中有以下一些应用 座舱相关术语全解 1. 智能座舱 智能座舱(intelligent cabi…...
【Fastjson反序列化漏洞:深入了解与防范】
一、Fastjson反序列化漏洞概述 Fastjson是一款高性能的Java语言JSON处理库,广泛应用于Web开发、数据交换等领域。然而,由于fastjson在解析JSON数据时存在安全漏洞,攻击者可以利用该漏洞执行任意代码,导致严重的安全威胁。 二、F…...
【OJ题解】C++实现反转字符串中的每个单词
💵个人主页: 起名字真南 💵个人专栏:【数据结构初阶】 【C语言】 【C】 【OJ题解】 题目要求:给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 题目链接: 反转字符串中的所…...
万字长文详解Hive聚合函数 grouping sets、cube、rollup原理、语法、案例和优化
目录 原理与语法 使用场景 多维度报表生成 复杂的数据分析 实际案例 原理与语法 与GROUPINGSETS的区别 实际案例 原理与语法 与CUBE的对比 实际案例 执行效率比较 优化建议 Hive提供了三个强大的高级聚合函数: GROUPING SETS 、 CUBE 和 ROLLUP ,用于处理复杂的…...
数列分块入门
本期是数列分块入门。其中的大部分题目来自hzwer在LOJ上提供的数列分块入门系列。 Blog:here (其实是对之前分块的 blog 的整理补充) sto hzwer orz %%% [转载] ---------------------------------------------------------------------------------…...
SPRD Android 14 Launcher 3 中添加长按桌面图标启动自由窗口模式功能
本文将介绍如何在SPRD Android 14 Launcher 3 中实现一个功能,使用户可以通过长按应用图标来启动自由窗口模式。这一功能的实现将提升多任务处理能力和应用使用体验。 修改的文件列表 以下是主要涉及的文件及其修改内容: QuickstepLauncher.java:添加自由窗口快捷方式的支…...
WebSocket详解:从前端到后端的全栈理解
文章目录 前言一、WebSocket简介1.1 WebSocket的特点 二、WebSocket的工作原理2.1 握手过程2.2 数据传输 三、WebSocket在前端的应用四、WebSocket在后端的应用五、WebSocket的局限与解决方案结语 前言 随着互联网技术的发展,传统的HTTP协议在某些场景下的局限性逐…...
L0phtCrack 7密码爆破实测:8位混合密码要跑多久?(含虚拟机安全测试指南)
L0phtCrack 7密码爆破实战:从原理到防御的深度解析 在网络安全领域,密码强度与破解时间的量化分析一直是红蓝对抗中的核心课题。本文将带您深入理解密码破解背后的技术原理,并通过在VMware虚拟机环境下的对照实验,展示不同复杂度…...
构建智能投资决策中枢:TradingAgents-CN多维度金融分析框架实战指南
构建智能投资决策中枢:TradingAgents-CN多维度金融分析框架实战指南 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 破解投资决策困境…...
Android Studio新手必看:如何避免SDK版本冲突?从build.gradle到Project Structure的完整指南
Android Studio新手避坑指南:SDK版本冲突全解析与实战解决方案 刚接触Android开发时,我曾在深夜被一个红色错误提示折磨得焦头烂额——"Failed to resolve: com.android.support:appcompat-v7:28.0.0"。原来这是典型的SDK版本冲突问题&#x…...
03-LlamaIndex节点解析:文本分块策略与NodeParser深度应用
03-LlamaIndex节点解析:文本分块策略与NodeParser深度应用 系列导航 01 核心概念与RAG处理管线02 多源数据加载与Data Connectors03 文本分块策略与NodeParser ← 当前04 向量存储与混合索引策略05 Retriever、Query Engine与Chat Engine06 Agent与Workflow编排07 多…...
知网AIGC检测算法升级后怎么降AI率?2026最新降AI率方法全面解读
知网AIGC检测算法升级后怎么降AI率?2026最新降AI率方法全面解读 前两天我室友拿着检测报告差点哭了——明明自己一个字一个字敲的论文,知网AI率居然标了38%。她当时整个人都懵了,因为上个月同专业的师姐用差不多的写法,AI率才12%就…...
macOS沙盒限制下运行OpenClaw:ollama-QwQ-32B权限解决方案
macOS沙盒限制下运行OpenClaw:ollama-QwQ-32B权限解决方案 1. 问题背景:当自动化遇上macOS沙盒 上周我尝试在macOS Ventura上部署OpenClaw对接本地ollama-QwQ-32B模型时,遭遇了典型的"权限墙"——明明所有服务都正常运行…...
Windows 11三指拖拽功能完全配置指南:从驱动安装到手势优化
Windows 11三指拖拽功能完全配置指南:从驱动安装到手势优化 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingersD…...
探秘AI应用架构师的企业数据价值挖掘宝藏
探秘AI应用架构师的企业数据价值挖掘宝藏 一、引言 (Introduction) 钩子 (The Hook) 在当今数字化浪潮席卷的时代,企业犹如置身数据的汪洋大海之中。据统计,全球每天产生的数据量高达数十亿TB。想象一下,企业每天收集的海量客户信息、业务交易…...
智能物流分拣破局:越疆协作分拣机器人高效升级指南
在电商、快递行业的高速发展下,物流分拣的压力越来越大,但长期以来,中小物流企业的分拣面临 “两难” 困境:人工分拣招工难、效率低,错分率达 1% 以上,大促期间更是人手不足;而传统的交叉带分拣…...
从电网到实验室——10kW大功率电源的Psim仿真实战
基于Psim的Boost型 PFC移相全桥AC-DC电源设计仿真 1、前级电网输入220AC,50Hz,中间级母线电压为600V,后级600V输入,547V输出,电压可调,功率10kW 2、前级基于Boost电路PFC,平均电流控制ÿ…...
