LeetCode 面试题 17.08 —— 马戏团人塔

server/2024/9/24 13:20:00/

阅读目录

    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现

1. 题目

2. 解题思路

首先,我们对人的身高按照从小到大排序,特别注意,对于身高相等的人,要按照体重从高到低排序。这时候,序列已经满足了在上面的人要比下面的人矮一点,然后,我们只需要保证提取到一个最长的体重的上升子序列即可。这一步骤也就是 LeetCode 300——最长上升子序列 的解答思路,贪心+二分查找。

为什么身高相等的情况下,要按照体重从高到低排序呢?因为,如果按照体重从低到高排序的话,第二个步骤身高相等的人就会满足体重的上升子序列,但实际上,题目要求的则是上面的人要比下面的人高一点,所以身高相同的情况下只能保留一个体重最小的

比如身高是 [ 2 , 3 , 3 , 3 , 5 , 8 ] [2, 3, 3, 3, 5, 8] [2,3,3,3,5,8],体重是 [ 3 , 5 , 5 , 4 , 2 , 6 ] [3, 5, 5, 4, 2, 6] [3,5,5,4,2,6],最终满足要求的其中一个序列是 [ ( 2 , 3 ) , ( 3 , 4 ) , ( 8 , 6 ) ] [(2,3), (3,4), (8,6)] [(2,3),(3,4),(8,6)]

而如果体重按照升序排列的话,那么身高是 [ 2 , 3 , 3 , 3 , 5 , 8 ] [2, 3, 3, 3, 5, 8] [2,3,3,3,5,8],体重是 [ 3 , 4 , 4 , 5 , 2 , 6 ] [3, 4, 4, 5, 2, 6] [3,4,4,5,2,6],得到的答案则是 [ ( 2 , 3 ) , ( 3 , 4 ) , ( 3 , 5 ) , ( 8 , 6 ) ] [(2,3), (3,4), (3,5), (8,6)] [(2,3),(3,4),(3,5),(8,6)],这是不满足题意要求的。

3. 代码实现

class Solution {
public:void quickSort(vector<int>& height, vector<int>& weight, int left, int right) {if (left < right) {int pivot = height[right];int i = left;for (int j = left; j <= right; ++j) {// 身高从小到大排,身高相等时,体重从大到小if (height[j] < pivot || (height[j] == pivot && weight[j] >= weight[right]) ) {int temp = height[i];height[i] = height[j];height[j] = temp;temp = weight[i];weight[i++] = weight[j];weight[j] = temp;}}quickSort(height, weight, left, i-2);quickSort(height, weight, i, right);}}int bestSeqAtIndex(vector<int>& height, vector<int>& weight) {if (height.empty()) {return 0;}quickSort(height, weight, 0, height.size()-1);vector<int> new_weight = {weight[0]};for (int i = 1; i < weight.size(); ++i) {if (weight[i] > new_weight.back()) {new_weight.push_back(weight[i]);} else if (weight[i] < new_weight.back()) {int l = 0;int r = new_weight.size()-1;int pos = -1;while (l <= r) {int mid = l + (r - l) / 2;if (new_weight[mid] == weight[i]) {break;// 找到第一个比weight[i]大的位置进行替换} else if (new_weight[mid] > weight[i]) {if (mid == 0 || new_weight[mid-1] < weight[i]) {pos = mid;break;} else {r = mid - 1;}} else {l = mid + 1;}}if (pos != -1) {new_weight[pos] = weight[i];}}}return new_weight.size();}
};

http://www.ppmy.cn/server/20945.html

相关文章

【网络安全】跨站脚本攻击(XSS)

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、XSS简介 二、XSS漏洞危害 三、XSS漏洞类型 1.反射型XSS 2.存储型XSS 3.DOM型XSS 四、XSS漏洞防御 一、XSS简介 XSS&#xff08;Cross-Site Scripting&#xff09; XSS 被…

【经典算法】LeetCode31. 下一个排列(Java/C/Python3/GO实现含注释说明,中等)

题目描述 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&…

视频怎么批量压缩?5个好用的电脑软件和在线网站

视频怎么批量压缩&#xff1f;有时候我们需要批量压缩视频来节省存储空间&#xff0c;便于管理文件和空间&#xff0c;快速的传输发送给他人。有些快捷的视频压缩工具却只支持单个视频导入&#xff0c;非常影响压缩效率&#xff0c;那么今天就向大家从软件和在线网站2个角度介绍…

推荐算法顶会论文合集

SIGIR SIGIR 2022 | 推荐系统相关论文分类整理&#xff1a;8.74 https://mp.weixin.qq.com/s/vH0qJ-jGHL7s5wSn7Oy_Nw SIGIR2021推荐系统论文集锦 https://mp.weixin.qq.com/s/N7V_9iqLmVI9_W65IQpOtg SIGIR2020推荐系统论文聚焦&#xff1a; https://mp.weixin.qq.com/s…

Spring Security(学习笔记) --AuthenticationProvider案例演示梳理!

重点标识 AuthenticationManager 默认是有parent的。 Security 向Spring容器注册了一个AuthenticationManager &#xff0c;是一个全局的&#xff0c;也就是所谓的parent。 注册一个AuthenticationManager &#xff0c;就是一个全局的 如果想要局部的&#xff0c;可以设置一个…

什么是SSRF攻击?该如何防御SSRF攻击?

随着网络安全形式日益严峻&#xff0c;各式各样的攻击频繁发生。当前&#xff0c;应用程序为了给用户提供更多更方便的功能&#xff0c;从另一个URL获取数据的场景越来越多&#xff0c;因此出现了一种安全漏洞攻击-SSRF。并且&#xff0c;由于云服务和体系结构的复杂性&#xf…

分发糖果——使用贪心算法

135. 分发糖果 已解答 困难 相关标签 相关企业 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给…

2024LarkXR新增功能系列之二 | 普通应用多开推流

在数字化迅速演变的今天&#xff0c;3D数字时代的到来已经改变了许多行业的运作方式。特别是在虚拟现实领域&#xff0c;实时云渲染技术正迅速成为关键驱动力&#xff0c;这种技术使得复杂的3D视觉内容可以迅速、高效地通过云平台渲染并传输到用户的设备上&#xff0c;无论设备…