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

阅读目录

    • 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();

    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

输电线路的“天眼”:双目协同图像视频监测装置

在广袤的天地之间&#xff0c;纵横交错的输电线路如同血脉一般&#xff0c;为我们的生活输送着源源不断的电力。然而&#xff0c;这些“血脉”也常常面临着各种挑战&#xff0c;如外力破坏、恶劣天气等。为了守护这些重要的“生命线”&#xff0c;鼎信智慧研发了一款智能监控设…

类和对象【下】

本节博客主要围绕构造函数、static成员、友元、内部类、匿名对象等待关于“类和对象”这些细节性知识进行收尾&#xff0c;有需要借鉴即可 类和对象_下目录 1.再谈构造函数1.1初始化列表1.2意义 2.static成员2.1概念2.2特性2.3习题 3.友元3.1友元函数概念3.2友元函数的特性 4.内…

Blender笔记之基本操作

code review! —— 2024-04-27 杭州 Blender笔记…

pytest教程-27-分布式执行用例插件-pytest-xdist

上一小节我们学习了pytest随机执行用例插件-pytest-random-order&#xff0c;本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。 前言 平常我们手工测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟。如果一个测试人员执行需要10…

选择汽车制造业数据外发解决方案,核心在这三点

汽车制造业是我国国民经济发展的支柱产业之一&#xff0c;汽车制造行业景气度与宏观经济、居民收入水平和固定资产投资密切相关。汽车制造业产业链长&#xff0c;关联度高&#xff0c;汽车制造上游行业主要为钢铁、化工等行业&#xff0c;下游主要为个人消 费、基建、客运和军事…

Linux 常用命令分类

一、帮助命令 命令功能语法man求助man [命令]info求助info [命令]help求助[命令] --help 1.1、man 命令 按键功能空格向下翻页pagedown也就是fn ↓ \downarrow ↓向下翻页pageup向上翻页/string向下查找string这个字符串?string向上查找string这个字符串n,Nn表示继续, N表示…

PotatoPie 4.0 实验教程(26) —— FPGA实现摄像头图像拉普拉斯锐化

为什么要对图像进行拉普拉斯锐化 对图像进行拉普拉斯锐化的目的是增强图像的边缘和细节&#xff0c;使图像看起来更加清晰和锐利。这种技术常用于图像处理中&#xff0c;具体原因如下&#xff1a; 增强图像的边缘信息&#xff1a;拉普拉斯锐化可以突出图像中的边缘特征&#x…

Spring AOP(1)

AOP概述 AOP是Spring框架的第二大核心(第一大核心是IoC). 什么是AOP? 即Aspect Oriented Programming(面向切面编程) 什么是面向切面编程呢? 切面就是指某一类特定的问题, 所以AOP也可以叫做面向特定方法编程. 什么是面向特定方法编程呢?比如上一篇中讲到的拦截器, 就是…

windows无法启动Remote Desktop Services服务(位于本地计算机上) 错误2:系统找不到指定文件

在使用远程计算机时出现的错误&#xff0c;计算机在后台能正常打开&#xff0c;而无法使用远程连接&#xff0c;初步判定为远程服务问题&#xff0c;检查步骤如下&#xff1a; 一、检查计算机Remote Desktop Services服务 该服务是开启计算机远程时必要的服务&#xff0c;若该…

2024 年最好的免费数据恢复软件,您可以尝试的几个数据恢复软件

由于系统崩溃而丢失数据可能会给用户带来麻烦。我们将重要的宝贵数据和个人数据保存在我们的 PC、笔记本电脑和其他数字设备上。您可能会因分区丢失、意外删除文件和文件夹、格式化硬盘驱动器而丢失数据。数据丢失是不幸的&#xff0c;如果您不小心从系统中删除了文件或数据&am…

Vue3+Vite开发的项目进行加密打包

本文主要介绍Vue3+Vite开发的项目如何进行加密打包。 目录 一、vite简介二、混淆工具三、使用方法1. 安装插件:2. 配置插件:3. 运行构建:4. 自定义混淆选项:5. 排除文件:下面是Vue 3+Vite开发的项目进行加密打包的方法。 一、vite简介 Vite 是一个由 Evan You 创造的现代…

【Linux】进程信号 -- 详解

⚪前言 注意&#xff1a;进程间通信中的信号量跟下面要讲的信号没有任何关系。 一、从不同角度理解信号 1、生活角度的信号 你在网上买了很多件商品&#xff0c;在等待不同商品快递的到来。但即便快递没有到来&#xff0c;你也知道快递来临时&#xff0c;你该怎么处理快递&a…

Java设计模式 _结构型模式_桥接模式

一、桥接模式 1、桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式。用于把一个类中多个维度的抽象化与实现化解耦&#xff0c;使得二者可以独立变化。 2、实现思路 使用桥接模式&#xff0c;一定要找到这个类中两个变化的维度&#xff1a;如支…

基于Spring Boot的旅游管理系统设计与实现

基于Spring Boot的旅游管理系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台浏览管理界面图&#xff0c;通过内容列表可以获取网…

Git--多人协作

目录 一、多人协作一二、多人协作二三、 远程分⽀删除后&#xff0c;本地git branch -a依然能看到的解决办法 一、多人协作一 ⽬前&#xff0c;我们所完成的⼯作如下&#xff1a; 1.基本完成Git的所有本地库的相关操作&#xff0c;git基本操作&#xff0c;分⽀理解&#xff0c;…

适用于芯片行业的开发及管理工具:版本控制、持续集成、代码分析及项目管理工具介绍

3月28日-29日&#xff0c;2024国际集成电路展览会暨研讨会&#xff08;IIC Shanghai&#xff09;在上海成功举行。此次盛会汇聚了集成电路产业的众多领军企业&#xff0c;共同探寻和把握集成电路产业的发展脉络。 龙智携芯片研发及管理解决方案亮相展会&#xff0c;展示如何通…

遥感雷达波段的原理及应用

雷达波段是不同波长的组。每一种都有其独特的穿透地球表面的能力。它们还可以揭示环境的不同方面。 雷达频段在电磁频谱内具有特定的频率范围。这些波段由 L-、S-、C- 和 X-波段等字母表示。稍后会详细介绍这一点。 什么是合成孔径雷达&#xff1f; 合成孔径雷达 (SAR) 是一…

云原生Kubernetes: K8S 1.29版本 部署GitLab

目录 一、实验 1.环境 2.搭建NFS 3.K8S 1.29版本 部署Redis 4.K8S 1.29版本 部署Postgresql 5.K8S 1.29版本 部署GitLab 6.K8S 部署istio微服务 7.K8S 部署ingress应用路由 二、问题 1.K8S部署gitlab报错 2.gitlab创建失败 3.生成网关资源报错 4.安装istio 报错 …

PotatoPie 4.0 实验教程(30) —— FPGA实现摄像头图像中值滤波

中值滤波是什么&#xff1f; 图像的中值滤波是一种非线性图像滤波方法&#xff0c;它用于去除图像中的椒盐噪声或其他类型的噪声。中值滤波的原理是用每个像素周围的邻域中的中值来替代该像素的值。与均值滤波不同&#xff0c;中值滤波不会受到极端值的影响&#xff0c;因此在处…

FebHost:摩洛哥.ma域名注册介绍,规则有哪些?

摩洛哥国家域名介绍 摩洛哥是位于非洲西北部的一个国家&#xff0c;北部和西部面向地中海和大西洋&#xff0c;东部和南部则与阿尔及利亚、西撒哈拉和毛里塔尼亚接壤。摩洛哥的首都是拉巴特&#xff0c;但最大城市是卡萨布兰卡。摩洛哥的官方语言是阿拉伯语和柏柏尔语&#xf…