面试题 17.08. 马戏团人塔

news2024/11/23 12:54:10

题目链接

面试题 17.08. 马戏团人塔 mid

题目描述

有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点。已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人。

示例:

输入:height = [65,70,56,75,60,68] weight = [100,150,90,190,95,110]
输出:6
解释:从上往下数,叠罗汉最多能叠 6 层:(56,90), (60,95), (65,100), (68,110), (70,150), (75,190)

提示:

  • h e i g h t . l e n g t h = w e i g h t . l e n g t h ≤ 10000 height.length = weight.length \leq 10000 height.length=weight.length10000

解法:排序 + 二分 + 贪心

先按 h e i g h t height height 升序排序,当身高相同时,再按 w e i g h t weight weight 降序排序。

比如 [ 2 , 6 ] , [ 2 , 5 ] , [ 2 , 7 ] , [ 1 , 4 ] , [ 3 , 8 ] [2,6],[2,5],[2,7],[1,4],[3,8] [2,6],[2,5],[2,7],[1,4],[3,8] 排序之后就变为 [ 1 , 4 ] , [ 2 , 7 ] , [ 2 , 6 ] , [ 2 , 5 ] , [ 3 , 8 ] [1,4],[2,7],[2,6],[2,5],[3,8] [1,4],[2,7],[2,6],[2,5],[3,8]

接着我们按照第二维,即 w e i g h t weight weight { 4 , 7 , 6 , 5 , 8 } \{4,7,6,5,8\} {4,7,6,5,8},求 最长上升子序列 的长度。

最长上升子序列为 { 4 , 5 , 8 } \{ 4,5,8\} {4,5,8},即 [ 1 , 4 ] , [ 2 , 5 ] , [ 3 , 8 ] [1,4],[2,5],[3,8] [1,4],[2,5],[3,8],叠罗汉最多叠 3 3 3 个人。

最长上升子序列解法

由于 n = 1 0 4 n = 10^4 n=104,我们直接使用动态规划的时间复杂度为 O ( n 2 ) O(n^2) O(n2),会超时。

会超时的代码:

using PII = pair<int,int>;

class Solution {
public:
    int bestSeqAtIndex(vector<int>& height, vector<int>& weight) {
        int n = height.size();
        vector<PII> a;
        for(int i = 0;i < n;i++){
            auto h = height[i] , w = weight[i];
            a.emplace_back(h,w);
        }

        sort(a.begin(),a.end(),[&](auto &p,auto &q){
            if(p.first == q.first) return p.second > q.second;
            return p.first < q.first;
        });

        int ans = 0;
        vector<int> f(n);

        for(int i = 0;i < n;i++){
            f[i] = 1;
            for(int j = 0;j < i;j++){
                if(a[i].second > a[j].second) f[i] = max(f[i],f[j] + 1);
            }
            ans = max(ans , f[i]);
        }
        return ans;
    }
};

在这里插入图片描述
最长子序列,我们可以使用二分来优化,将时间复杂度优化为 O ( n × l o g n ) O(n \times logn) O(n×logn),能够通过本题。

时间复杂度: O ( n × l o g n ) O(n \times logn) O(n×logn)

C++代码:

using PII = pair<int,int>;

class Solution {
public:
    int bestSeqAtIndex(vector<int>& height, vector<int>& weight) {
        int n = height.size();
        vector<PII> a;
        for(int i = 0;i < n;i++){
            auto h = height[i] , w = weight[i];
            a.emplace_back(h,w);
        }

        sort(a.begin(),a.end(),[&](auto &p,auto &q){
            if(p.first == q.first) return p.second > q.second;
            return p.first < q.first;
        });

        int ans = 0;
        vector<int> f;

        for(int i = 0;i < n;i++){
            if(f.size() == 0 || a[i].second > f.back()) f.push_back(a[i].second);
            else{
                auto it = lower_bound(f.begin(),f.end(),a[i].second);
                *it = a[i].second;
            }
        }
        return f.size();
    }
};

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

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

相关文章

Microsoft 网络监控

随着网络的发展和变得越来越复杂&#xff0c;公司比以往任何时候都更需要监控其网络基础设施&#xff0c;因为即使是轻微的系统中断也可能导致重大损失。网络监控工具提供实时数据和网络状态的图形概述。这使您能够准确地了解正在发生的事情&#xff0c;以便您知道需要更改的位…

进程间的通信方式

文章目录 1.简单介绍2.管道2.1管道的基础概念**管道读写规则**:**管道特点** 2.2匿名管道匿名管道父子进程间通信的经典案例&#xff1a; 2.3命名管道基本概念:命名管道的创建&#xff1a;命名管道的打开规则&#xff1a;匿名管道与普通管道的区别**例子&#xff1a;用命名管道…

基于SpringBoot+Vue的宠物领养饲养交流管理平台设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

HTML实现移动端布局与页面自适应

我们所说的布局方式&#xff0c;这里我们通常指的是width和height在不同页面情况下面的改变。 常见页面的布局方式有 静态布局 &#xff08;px布局&#xff0c;就是固定其高宽&#xff0c;不论页面怎样放大缩小&#xff0c;其占领的依旧是&#xff0c;使用px固定了的高宽&…

这种方法可以解决开发中的重复“造轮子”

一、前言 开发中&#xff0c;一直听到有人讨论是否需要重复造轮子&#xff0c;我觉得有能力的人&#xff0c;轮子得造。但是往往开发周期短&#xff0c;用轮子所节省的时间去更好的理解业务&#xff0c;应用到业务中&#xff0c;也能清晰发现轮子的利弊&#xff0c;一定意义上解…

PyTorch深度学习(三)【Logistic Regression、处理多维特征的输入】

Logistic Regression 这个名字叫做回归&#xff0c;做的是分类。 线性和logistic的模型&#xff1a; 使用的损失函数&#xff1a;二分类交叉熵 &#xff08;这个也叫做BCELoss&#xff09; logistic要做的事&#xff1a; 代码&#xff1a; import torch# import torch.nn.fun…

Java基于SpringBoot的校园疫情防控系统

文章目录 第一章2.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数据库表 第五章 系统功能实现5.1系统功能模块5.2后台功能模块5.2.1管理员功能 源码咨询 第一章 springboot校园疫情防控系统演示录像2022 一个好的系统能将校园疫情防控的管理…

VB求平均值

VB求平均值 Private Function pj(x() As Integer) As SingleDim m%, n%, i%, s%m LBound(x): n UBound(x)For i m To ns s x(i)Next ipj s / (n - m 1) End Function Private Sub Command1_Click()Dim a%(1 To 10), i%, aver!For i 1 To 10a(i) Int(Rnd() * 10) 随机…

IMX6ULL移植篇-Linux内核编译

一. Linux内核 Linux 官网为 https://www.kernel.org &#xff0c;所以你想获取最新的 Linux 版本就可以在这个网站上下载。 Linux-4.x 版本 的 Linux 和 5.x 版本没有本质上的区别&#xff0c; 5.x 更多的是加入了一些新的平台、新的外设驱动而已。 NXP 会从网址 …

提升科研可复现性:和鲸聚焦 AI for Science 全生命周期管理

今年三月&#xff0c;国家科技部会同自然科学基金委正式启动“人工智能驱动的科学研究&#xff08;AI for Science&#xff09;”专项部署工作。数据驱动的科学研究长期以来面临诸多困境&#xff0c;针对传统科研工作流中过度依赖人类专家经验与体力的局限性&#xff0c;AI4S 旨…

优化软件系统,解决死锁问题,提升稳定性与性能 redis排队下单

项目背景&#xff1a; 随着用户数量的不断增加&#xff0c;我们的速卖通小管家软件系统面临了一个日益严重的问题&#xff1a;在从存储区提供程序的数据读取器中进行读取时&#xff0c;频繁出现错误。系统报告了一个内部异常: 异常信息如下&#xff1a; 从存储区提供程序的数…

nvme各模块间的关系总结

目录&#xff1a;driver/host/nvme/makefile # SPDX-License-Identifier: GPL-2.0 ccflags-y -I$(src)obj-$(CONFIG_NVME_CORE) nvme-core.o obj-$(CONFIG_BLK_DEV_NVME) nvme.o obj-$(CONFIG_NVME_FABRICS) nvme-fabrics.o obj-$(CONFIG_NVME_RDMA) nvme-rdma.…

02、Servlet核心技术(下)

目录 1 ServletJDBC应用&#xff08;重点&#xff09; 2 重定向和转发&#xff08;重点&#xff09; 2.1 重定向的概述 2.2 转发的概述 3 Servlet线程安全&#xff08;重点&#xff09; 4 状态管理&#xff08;重点 &#xff09; 5 Cookie技术&#xff08;重点&#xf…

26 环形链表II

环形链表 II 题解1 哈希表题解2 双指针 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表…

pgzrun 拼图游戏制作过程详解(10)

10. 拼图游戏继续升级——多关卡拼图 初始化列表Photos用来储存拼图文件名&#xff0c;Photo_ID用来统计当下是第几张拼图&#xff0c;Squares储存当下拼图的24张小拼图的文件名&#xff0c;Gird储存当下窗口上显示的24个小拼图及坐标。 Photos["girl_","boy_…

“顽固”——C语言用栈实现队列

解题图解&#xff1a; 1、 先用stack1存储push来的数据 2、每当要pop数据时&#xff0c;从stack2中取&#xff0c;如果 stack2为空&#xff0c;就先从stack1中“倒”数据到stack2。 这就是用栈实现队列的基本操作 这道题看起来比较容易&#xff0c;但是&#xff01;如果你用C语…

jupyter notebook插件安装及插件推荐

安装插件 安装插件选择的工具栏 pip install jupyter_contrib_nbextensions将插件工具栏添加到jupyter notebook页面 jupyter contrib nbextension installdisable configuration for nbextensions without explicit compatibility (they may break your notebook environme…

《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.25.14集群(多主多从)》

一、架构图 如下图所示: 二、环境信息 1、资源下载基于containerd部署容器版kubernetes1.25.14集群资源合集 2、部署规划主机名K8S版本系统版本内核版本IP地址备注k8s-master-121.25.14Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.12master节点 + etcd节点k8s-master-131.…

【超实用】2023年,学生上班族如何简单快速,低成本的搭建一个博客网站

文章目录 前言实操环节香港虚拟机购买博客搭建ssl证书配置备份设置 总结 前言 因为工作和生活的需要&#xff0c;我一直有博客的搭建需求。我将总结下来&#xff0c;为读者提供参考。  起初&#xff0c;我采用的是香港云虚拟主机&#xff0c;这种虚拟机极其便宜&#xff08;一…

java接入烽火科技拾音器详细步骤

1 背景 项目中需要拾音器去采集音频数据并保存成mp3这种音频文件&#xff0c;以便以后如果有纠纷后可以作为证据去减少纠纷&#xff0c;于是采购了一台烽火科技的拾音器设备&#xff0c;包括一个采音器及一个处理终端。 2 接线 设备拿过来第一件事是接线&#xff0c;通电&…