【教3妹学编程-算法题】人员站位的方案数 II

瑟瑟发抖

2哥 : 3妹,今天第一天上班啊,开工大吉~
3妹:2哥,开工大吉鸭,有没有开工红包?
2哥 : 我们公司比较扣,估计不会发的。
3妹:我们公司估计也一样,不过依然挡不住我打工人的热情!
2哥 :哈哈哈哈,公司不给咱发红包,咱们自掏腰包吃顿好的吧,祝愿2024都发大财!
3妹:好鸭好鸭,我想吃火锅,红红火火
2哥:没问题
3妹:听说有的公司,人员站成两排欢迎老板,老板们给发红包
2哥:好吧,只要有红包,站着舔老板也不是不可以🐷,说到人员站位,今天有一道“人员站位”的题目, 让我们先做一下吧~

吃瓜

题目:

给你一个 n x 2 的二维数组 points ,它表示二维平面上的一些点坐标,其中 points[i] = [xi, yi] 。

我们定义 x 轴的正方向为 右 (x 轴递增的方向),x 轴的负方向为 左 (x 轴递减的方向)。类似的,我们定义 y 轴的正方向为 上 (y 轴递增的方向),y 轴的负方向为 下 (y 轴递减的方向)。

你需要安排这 n 个人的站位,这 n 个人中包括 Alice 和 Bob 。你需要确保每个点处 恰好 有 一个 人。同时,Alice 想跟 Bob 单独玩耍,所以 Alice 会以 Bob 的坐标为 左上角 ,Bob 的坐标为 右下角 建立一个矩形的围栏(注意,围栏可能 不 包含任何区域,也就是说围栏可能是一条线段)。如果围栏的 内部 或者 边缘 上有任何其他人,Alice 都会难过。

请你在确保 Alice 不会 难过的前提下,返回 Alice 和 Bob 可以选择的 点对 数目。

注意,Alice 建立的围栏必须确保 Alice 的位置是矩形的左上角,Bob 的位置是矩形的右下角。比方说,以 (1, 1) ,(1, 3) ,(3, 1) 和 (3, 3) 为矩形的四个角,给定下图的两个输入,Alice 都不能建立围栏,原因如下:

图一中,Alice 在 (3, 3) 且 Bob 在 (1, 1) ,Alice 的位置不是左上角且 Bob 的位置不是右下角。
图二中,Alice 在 (1, 3) 且 Bob 在 (1, 1) ,Bob 的位置不是在围栏的右下角。
image.png

示例 1:
image.png
输入:points = [[1,1],[2,2],[3,3]]
输出:0
解释:没有办法可以让 Alice 的围栏以 Alice 的位置为左上角且 Bob 的位置为右下角。所以我们返回 0 。

示例 2:
image.png
输入:points = [[6,2],[4,4],[2,6]]
输出:2
解释:总共有 2 种方案安排 Alice 和 Bob 的位置,使得 Alice 不会难过:

  • Alice 站在 (4, 4) ,Bob 站在 (6, 2) 。
  • Alice 站在 (2, 6) ,Bob 站在 (4, 4) 。
    不能安排 Alice 站在 (2, 6) 且 Bob 站在 (6, 2) ,因为站在 (4, 4) 的人处于围栏内。
    示例 3:
    image.png
    输入:points = [[3,1],[1,3],[1,1]]
    输出:2
    解释:总共有 2 种方案安排 Alice 和 Bob 的位置,使得 Alice 不会难过:
  • Alice 站在 (1, 1) ,Bob 站在 (3, 1) 。
  • Alice 站在 (1, 3) ,Bob 站在 (1, 1) 。
    不能安排 Alice 站在 (1, 3) 且 Bob 站在 (3, 1) ,因为站在 (1, 1) 的人处于围栏内。
    注意围栏是可以不包含任何面积的,上图中第一和第二个围栏都是合法的。

提示:

2 <= n <= 1000
points[i].length == 2
-10^9 <= points[i][0], points[i][1] <= 10^9
points[i] 点对两两不同。

思路:

思考

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

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

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

如果 points[j][1] 比之前枚举的点的纵坐标都大,那么矩形内没有其它点,符合要求,答案加一。
如果 points[j][1]小于等于之前枚举的某个点的纵坐标,那么矩形内有其它点,不符合要求。
所以在枚举 points[j]的同时,需要维护纵坐标的最大值 maxY。这也解释了为什么横坐标相同的,按照纵坐标从大到小排序。这保证了横坐标相同时,我们总是优先枚举更靠上的点,不会误把包含其它点的矩形也当作符合要求的矩形。

java代码:

class Solution {public int numberOfPairs(int[][] points) {Arrays.sort(points, (p, q) -> p[0] != q[0] ? p[0] - q[0] : q[1] - p[1]);int ans = 0;for (int i = 0; i < points.length; i++) {int y0 = points[i][1];int maxY = Integer.MIN_VALUE;for (int j = i + 1; j < points.length; j++) {int y = points[j][1];if (y <= y0 && y > maxY) {maxY = y;ans++;}}}return ans;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle触发器

触发器 满足特定事件时系统自动执行的命名块。主要用于实现一些比较复杂的完整性需求。 分类 DML触发器&#xff0c;DDL触发器&#xff0c;替代触发器&#xff0c;从数据库事件触发器。 DML触发器&#xff1a;在表上执行DML操作时自动触发。 创建DML触发器。 考虑四个方面&a…

【工具类】vscode ssh 远程免密登录开发

存放代码的机器运行 sshd,使用 vscode 的机器保证可以通过 ssh 登录服务器vscode 机器通过 ssh-keygen 生成 ssh 公私钥对将客户端的 id_rsa.pub 加入到服务器的鉴权队列 cat id_rsa.pub >> authorized_keysvscode 配置即可.ctrlp, remote-ssh: open ssh configuration f…

HarmonyOS router页面跳转

默认启动页面index.ets import router from ohos.router import {BusinessError} from ohos.baseEntry Component struct Index {State message: string Hello World;build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//添加按钮&am…

【 JS 进阶 】原型对象、面向对象

目标 了解构造函数原型对象的语法特征&#xff0c;掌握 JavaScript 中面向对象编程的实现方式&#xff0c;基于面向对象编程思想实现 DOM 操作的封装。 了解面向对象编程的一般特征掌握基于构造函数原型对象的逻辑封装掌握基于原型对象实现的继承理解何为原型链及其作用能够处理…

Hive使用双重GroupBy解决数据倾斜问题

文章目录 1.数据准备2.双重group by实现 解决数据倾斜2.1 第一层加盐group by2.2 第二层去盐group by 1.数据准备 create table wordcount(a string) row format delimited fields terminated by ‘,’; load data local inpath ‘opt/2.txt’ into table wordcount; hive (…

spring boot rabbitmq常用配置

直接上代码 package com.example.demo;import org.aopalliance.aop.Advice; import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframewo…

TP-LINK路由器的IPTV功能测试验证

路由器设置 路由器设置页面的说明&#xff1a; 此功能需配合TP-LINK面板式AP使用&#xff0c;可在路由器与AP之间建立IPTV数据透传通道&#xff0c;改善IPTV机顶盒与光猫距离较远不易连接的问题。 注意&#xff1a;开启IPTV功能会导致LLDP功能无法正常使用。 直接按设置向导…

C++Qt:noteBookPro_01

一、创建项目 选择Qt Widgets 常用的是QWidgets和MainWindow。两者的区别&#xff1a; QWidgets用于简单的窗口&#xff0c;没有内置的菜单栏、工具栏和状态栏。适用于简单专用的应用程序&#xff0c;不需要复杂的界面组件。 MainWindow是包含完整的菜单栏、工具栏和状态栏的主…

Linux 主机数据拷贝与 Linux 服务器之间拷贝文件的方法

Linux 主机数据拷贝与 Linux 服务器之间拷贝文件的方法 1. 使用 scp 命令2. 使用 rsync 命令3. 使用 scp 和 rsync 的图形界面工具4. 使用 FTP/SFTP 协议总结与比较 在 Linux 系统中&#xff0c;数据拷贝是日常操作中的常见需求&#xff0c;尤其是在不同主机或服务器之间进行文…

近场2D beamforming Heatmap图

文章目录 想法代码目前啥样想法 参考论文Beam Focusing for Near-Field Multiuser MIMO Communications,可视化beam focusing效应 代码 clc; clear;% 网格范围 D = 1; % 整个均匀平面阵列的孔径 lambda = 1e-2; % 波长0.01m,单位:米 30GhzN_d = floor(2 * D / lambda); %…

深入理解C++ 虚函数

C 中的虚函数&#xff08;virtual function&#xff09;是面向对象编程中的一个重要概念&#xff0c;它允许子类重新定义从父类继承的方法。当子类对象被当作父类对象使用时&#xff0c;可以通过子类的方法实现来调用子类的方法&#xff0c;而不是父类的方法。这就是多态&#…

Java 播放音频

Java 播放音频 1 依赖2 接口3 实现4 测试 1 依赖 <dependency><groupId>com.googlecode.soundlibs</groupId><artifactId>mp3spi</artifactId><version>1.9.5.4</version> </dependency><!-- 如果需要解码播放flac文件则引…

PS自由变换的小技巧--墙面广告牌

墙面广告牌&#xff0c;如何用PS做出看上去特别真实的一个效果 1.首先&#xff0c;我们会有墙面跟广告栏2个图层 2.然后将广告牌复制一层 3.接着用钢笔工具画出墙面的透视&#xff0c;也就是两条线&#xff0c;这两条线的交叉点就是墙面的透视点 4.接着选中广告牌复制图层&…

杨氏矩阵和杨辉三角

杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N); 分析 若要满足要求时间复杂度小于O(N)&#xff0c;就不能每一行一个个…

spring工具类

/*** spring工具类 方便在非spring管理环境中获取bean* */ Component public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware {/** Spring应用上下文环境 */private static ConfigurableListableBeanFactory beanFactory;private sta…

macad.common解析properties,evaluator

1.properties using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices;// 将 ComVisible 设置为 false 使得此程序集中的类型对 COM 组件不可见。 // 如果需要从 COM 访问此程序集中的类型&#xff0c;请将 ComVisible 属性设…

算法:带权重随机算法

算法思想&#xff1a;对象权重 / 所有对象权重总和即每个对象相对应的概率 public static void main(String[] args) throws IOException {//初始化每个人的权重//1.从文件中导入数据到集合BufferedReader br new BufferedReader(new FileReader("D:\\zzz.txt"));//…

TCP流量控制+拥塞控制

流量控制&#xff1a; 目标&#xff1a;流量控制主要解决的是发送方和接收方之间处理能力的不匹配问题。它的目的是确保发送方不会发送数据过快&#xff0c;以至于接收方无法及时接收并处理这些数据&#xff0c;从而避免数据包在网络中堆积和丢失。实现方式&#xff1a;在TCP协…

【.NET Core】深入理解async 和 await 理解

【.NET Core】深入理解async 和 await 理解 文章目录 【.NET Core】深入理解async 和 await 理解一、概述二、async异步执行机制理解三、async与await应用3.1 async与await简单应用3.2 带有返回值async与await应用 四、async和await中常见问题总结4.1 当方法用async标识时&…

MySql5.7之ERROR 1045 (28000)问题处理

MySql5.7之ERROR 1045 (28000)问题处理 文章目录 MySql5.7之ERROR 1045 (28000)问题处理1. ERROR 1045 (28000)问题2.问题原因3. 解决方法(重置密码)1. 修改my.ini配置2. 修改密码3. 刷新权限4. 再次修改my.ini配置 1. ERROR 1045 (28000)问题 时隔多日连接MySQL时出现了"…