Leetcode3027. 人员站位的方案数 II

2024-02-18 07:36

本文主要是介绍Leetcode3027. 人员站位的方案数 II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Every day a Leetcode

题目来源:3027. 人员站位的方案数 II

解法1:暴力

暴力枚举 liupengsay 和小羊肖恩的位置,当 liupengsay 和小羊肖恩的位置满足要求(liupengsay 建立的围栏必须确保 liupengsay 的位置是矩形的左上角,小羊肖恩的位置是矩形的右下角)时,再次遍历数组 points,判断其余点是否会落在 liupengsay 建立的围栏内,若不会,计数器 count 自增 1。

代码:

/** @lc app=leetcode.cn id=3027 lang=cpp** [3027] 人员站位的方案数 II*/// @lc code=start
class Solution
{
public:int numberOfPairs(vector<vector<int>> &points){int n = points.size();int count = 0;for (int i = 0; i < n; i++){int x1 = points[i][0], y1 = points[i][1];for (int j = 0; j < n; j++){if (i == j)continue;int x2 = points[j][0], y2 = points[j][1];if (x1 <= x2 && y1 >= y2) // 围栏合法{bool ok = true;for (int k = 0; k < n; k++){if (k == i || k == j)continue;int x = points[k][0], y = points[k][1];if (x >= x1 && x <= x2 && y >= y2 && y <= y1){ok = false;break;}}if (ok)count++;}}}return count;}
};
// @lc code=end

结果:

超时。

在这里插入图片描述

复杂度分析:

时间复杂度:O(n3),其中 n 是数组 points 的元素个数。

空间复杂度:O(1)。

解法2:排序 + 枚举

将 points 按照横坐标从小到大排序,横坐标相同的,按照纵坐标从大到小排序。

如此一来,在枚举 points[i] 和 points[j] 时(i<j),就只需要关心纵坐标的大小。

固定 points[i],然后枚举 points[j]:

  • 如果 points[j][1] 比之前枚举的点的纵坐标都大,那么矩形内没有其它点,符合要求,答案加 1。
  • 如果 points[j][1] 小于等于之前枚举的某个点的纵坐标,那么矩形内有其它点,不符合要求。

所以在枚举 points[j] 的同时,需要维护纵坐标的最大值 maxY。这也解释了为什么横坐标相同的,按照纵坐标从大到小排序。这保证了横坐标相同时,我们总是优先枚举更靠上的点,不会误把包含其它点的矩形也当作符合要求的矩形。

最后返回答案。

代码:

/** @lc app=leetcode.cn id=3027 lang=cpp** [3027] 人员站位的方案数 II*/// @lc code=start// 排序 + 枚举class Solution
{
public:int numberOfPairs(vector<vector<int>> &points){sort(points.begin(), points.end(), [](const auto &p, const auto &q){ return p[0] != q[0] ? p[0] < q[0] : p[1] > q[1]; });int n = points.size();int count = 0;for (int i = 0; i < n; i++){int y0 = points[i][1];int max_y = INT_MIN;for (int j = i + 1; j < n; j++){int y = points[j][1];if (y <= y0 && y > max_y){max_y = y;count++;}}}return count;}
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n2),其中 n 是数组 points 的元素个数。

空间复杂度:O(1)。

这篇关于Leetcode3027. 人员站位的方案数 II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/720475

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计