找出这样一座塔中尽可能多的人

2024-04-23

首先我们看一下问题,

马戏团正在设计一种塔式表演,由人们站在彼此的塔顶上组成 肩膀。出于实用和美观的原因,每个人都必须比他或她下面的人矮且轻。给定马戏团中每个人的身高和体重,编写一个方法来计算最大可能的人数 在这样的一座塔里。

EXAMPLE:
Input:
        (ht, wt): (65, 100) (70, 150) (56, 90) (75, 190) (60, 95) (68, 110)
Output: The longest tower is length 6 and includes from top to bottom: 
        (56, 90) (60,95) (65,100) (68,110) (70,150) (75,190)

但我不太明白解决方案如下:

书中建议的解决方案:

  • 步骤 1. 按高度对所有物品进行排序 首先,然后按重量。这意味着 如果所有的高度都是唯一的, 那么项目将按以下顺序排序 他们的身高。如果高度是 同样,项目将按其排序 重量。示例:»»排序之前: (60, 100) (70, 150) (56, 90) (75, 190) (60, 95) (68,110)。 “后 排序:(56, 90), (60, 95), (60,100), (68, 110), (70,150), (75,190)。
  • 步骤 2. 找到最长序列 其中包含不断增加的高度和 增加重量。为此,我们:

  • a) 从开头开始
    顺序。目前,max_sequence 是 空的。

  • b) 如果对于下一个项目,
    身高和体重不大于 与前一项相比,我们
    将此项目标记为“不适合”

    c) 如果 找到的序列的项目数多于 “最大序列”,它变成“最大 顺序”。

  • d) 之后搜索是 重复“不合适的项目”,
    直到我们到达终点
    原始序列。

    public class Question {
    ArrayList<HtWt> items;
    ArrayList<HtWt> lastFoundSeq;
    ArrayList<HtWt> maxSeq;
    
    
    / Returns longer sequence
    ArrayList<HtWt> seqWithMaxLength(ArrayList<HtWt> seq1, ArrayList<HtWt> seq2) {
        return seq1.size() > seq2.size() ? seq1 : seq2;
    }
    
    
    // Fills next seq w decreased wts&returns index of 1st unfit item.
    int fillNextSeq(int startFrom, ArrayList<HtWt> seq) {
      int firstUnfitItem = startFrom;
      if (startFrom < items.size()) {
          for (int i = 0; i < items.size(); i++) {
            HtWt item = items.get(i);
            if (i == 0 || items.get(i-1).isBefore(item)) {
                seq.add(item);
            } else {
                firstUnfitItem = i;
            }
          }
      }
      return firstUnfitItem;
    }
    
    
    // Find the maximum length sequence
    void findMaxSeq() {
      Collections.sort(items);
      int currentUnfit = 0;
      while (currentUnfit < items.size()) {
          ArrayList<HtWt> nextSeq = new ArrayList<HtWt>();
          int nextUnfit = fillNextSeq(currentUnfit, nextSeq);
          maxSeq = seqWithMaxLength(maxSeq, nextSeq);
          if (nextUnfit == currentUnfit) 
            break;
          else 
            currentUnfit = nextUnfit;
      }
    }
    

    }

    问题,

    1> fillNextSeq函数的用法是什么? 2> 为什么检查“items.get(i-1).isBefore(item)”而不是将当前项目与seq中的最新项目进行比较?

假设排序列表为(1, 5), (2, 1), (2, 2),基于fillNextSeq的函数,

第一个 (1, 5) 将被推入序列中。那么项目 (2, 1) 不会被推入序列 b/c (2,1) 的权重小于 (1, 5)。接下来,由于 (2, 1) 在 (2, 2) 之前,因此 (2, 2) 将被推入序列中。

现在,序列包含 (1, 5) 和 (2, 2),这是不正确的,因为 (1, 5) 的权重大于 (2, 2) 的权重。

谢谢


fillNextSeq 的用途是获取组中身高/体重增加的下一个序列。它通过将连续的项目添加到 ArrayList seq 中来实现这一点,直到遇到更重或更高的人。

的功能items.get(i-1).isBefore(item)就是检查下一个人是否比当前的矮、轻。请记住,您已经按身高和体重对人员进行了排序,因此,如果序列中的下一个人比​​当前人更高或更重,那么他们将排在排序数组中的当前人之前。因此,有问题的行是将当前项目与序列中的最新项目进行比较,它只是通过比较它们在排序数组中的位置来实现。

希望这有帮助,祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找出这样一座塔中尽可能多的人 的相关文章

  • 如何动态查找连接组件

    使用不相交集数据结构可以很容易地得到图的连通分量 而且 它只是支持增量连接组件 http www boost org doc libs 1 46 1 libs graph doc incremental components html 然而
  • 加密成本高,解密成本低

    我希望该用户 攻击者加密数据并发送给服务器 现在我想要一种与标准算法完全相反的算法 使用快 难以解密 即很难使用服务器发送的密钥来加密密码等数据 以防止随机攻击 但很容易解密这样服务器在验证用户时消耗的时间非常少 但是对于攻击者来说 每次使
  • 合并字符数组中的最小重复次数

    假设我有两个数组 我想合并它们 以便合并后的数组具有最小重复次数 例如 x x 是重复 arr1 x d d m f m arr2 d d x f f m 唯一的条件是在合并数组中 元素来自arr1 and arr2必须出现在各自的订单中a
  • 在关键服务器上对字符串进行内存受限的外部排序,并合并和计算重复项(数十亿个文件名)

    我们的服务器生成如下文件 c521c143 2a23 42ef 89d1 557915e2323a sign xml在其日志文件夹中 第一部分是GUID 第二部分是名称模板 我想计算具有同名模板的文件的数量 例如 我们有 c521c143
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 在 O(n) 时间内找到 n x n 矩阵中的局部最小值

    所以 这不是我的家庭作业问题 而是取自 coursera 算法和数据结构课程的未评分作业 现已完成 You are given an n by n grid of distinct numbers A number is a local m
  • 编程 Pearls - 随机选择算法

    Programming Pearls 第一版第 120 页介绍了从 N 个整数总体中选择 M 个等概率随机元素的算法 InitToEmpty Size 0 While Size lt M do T RandInt 1 N if not Me
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 检索受“rowspan”影响的行的列索引的最有效方法是什么?

    考虑下表 table thead tr th th th A th th B th th C th tr thead tbody tr th 1 th td Apples td td Oranges td td Pears td tr tb
  • 如何将无向图转换为 DAG?

    The 维基页面 http en wikipedia org wiki Directed acyclic graph Relation to other kinds of graphs says 任何无向图都可以通过为其顶点选择总顺序并将每
  • 如何确定算法函数的复杂度?

    您如何知道算法函数对于特定操作是否需要线性 常数 对数时间 它取决于CPU周期吗 您可以通过三种方式 至少 做到这一点 在网上查找算法 看看它是如何描述其时间复杂度的 根据输入大小 自己检查算法 查看嵌套循环和递归条件等内容 以及每个循环运
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • 7 张牌扑克手牌评估器

    有谁知道评估 7 张牌扑克牌的快速算法吗 这比简单地暴力检查 7 张牌中每 21 个 5 张牌的组合更有效 Cheers Pete 我写了一篇JavaScript 核心评估方法仅使用位操作 因此速度非常快 考虑到这一点 查看 21 种组合还
  • 使用多级解决方案计算二维网格中的最近邻

    我有一个问题 在 x y 大小的网格中 我提供了一个点 并且我需要找到最近的邻居 在实践中 我试图在 pygame 中找到距离光标最近的点 该点跨越颜色距离阈值 计算如下 sqrt rgb1 0 rgb2 0 2 rgb1 1 rgb2 1
  • 如何有效地找到距给定点最远的点(从一组点中)?

    我正在寻找一种算法或数据结构来解决以下问题 给你一组点 S 然后你会得到另一个点形式的 Q 查询 对于每个查询 找到集合中距离给定点最远的点 集合中最多有 10 5 个点和 10 5 个查询 所有点的坐标都在 0 到 10 5 范围内 我想

随机推荐

  • 仅针对使用通道而定制的 Phoenix 应用程序如何在多台机器上扩展?使用HAProxy?如何向所有节点广播消息?

    我将节点应用程序纯粹用于带有 Redis PubSub 的 socket io 通道 目前我将其分布在 3 台机器上 并由其中一台机器上的 nginx 负载平衡提供支持 我想用 Phoenix 应用程序替换这个节点应用程序 而且我对 erl
  • 尝试测试字符串是否为整数时脚本崩溃

    我正在为 twitch 机器人制作一个 python 脚本 它基本上充当老虎机 免责声明 我对Python完全陌生 所以请不要杀我 在脚本的开头 我使用此代码来检查是否键入了正确的命令 检查第一个参数是否为整数 并检查用户是否有足够的积分
  • 依赖注入与托管依赖关系与全局对象

    我正在 Javascript BackboneJS 一个 MVC 框架 RequireJS 框架中工作 但这个问题有点 OO 通用 首先让我解释一下 在 Backbone 中 您的视图是传统视图和控制器的混合 而您的 HTML 模板是传统的
  • Python 面向对象编程:组合

    我一直在学习如何在 python 编程中实现组合 但我很难理解为什么它比继承更受欢迎 例如 到目前为止 这是我的代码 class Particle Constructor public def init self name charge r
  • 如何从 Java 8 中的迭代器获取第 n 个值?

    我整理了一个HashMap using 按值对 Map 进行排序 Java https stackoverflow com questions 109383 sort a mapkey value by values java对此我有一个L
  • Yii2 - 使用联结表插入关系数据,多对多连接

    我在使用 Yii2 稳定版 时遇到问题 我有一个 Content PK id 表 一个 Tag PK id 表和一个名为 Content Tag PK content id tag id 的联结表 我想用它来标记 例如 WP 标记 所有控制
  • 从 Guzzle 捕获 cURL 错误

    我有以下代码发出 Guzzle 4 1 请求 client new GuzzleHttp Client defaults headers User Agent gt userAgentString retry 0 do try return
  • 另一个日期时间问题

    我目前有一个这种格式的日期 2010 03 03 10 39 18 这是一个TIMESTAMPMySQL 中的字段 我需要为名为 Solr 的搜索引擎提供以下格式的日期 1995 12 31T23 59 59Z 以下是他们网站上有关日期的一
  • 服务资产发展非常缓慢

    我有一个带有默认资产管道的标准 Rails 3 Web 应用程序 突然之间 资源需要很长时间才能加载 我的页面加载时间从约 1 2 秒到约 1 分钟 服务器响应时间 home 正常 但某些 css 和 js 文件等待时间很长 长达 45 秒
  • Python Socket - 同时发送/接收消息

    基本上我一直在使用套接字和线程开发一个简单的聊天室 在我的客户端中 我可以接收和发送消息 我的问题是循环中一个消息先于另一个消息 所以如果我发送消息 我只会在发送消息后收到数据 我希望它像任何其他聊天室一样工作 当我发送消息时我可以收到消息
  • YouTubePlayerSupportFragment 不播放视频

    我有一个包含两个片段的 Activity 就像 YouTube 应用程序一样 YouTubePlayerSupportFragment 播放视频的半宽度 ListFragment 包含视频标题列表的列表 如 youtube 活动一启动 我就
  • 使用谷歌位置API在android中的onMapReady中获取当前位置

    我试图在我的应用程序内的谷歌地图上显示用户的当前位置 但我不想在用户移动时不断更新位置 应记录并显示他的初始位置 直到他关闭应用程序 我为此编写了以下代码 private GoogleMap mMap protected GoogleApi
  • WebApi 强制操作返回 xml

    我有这个动作 public IHttpActionResult SearchFor int aboItemType DTO FilterColumns filter Do stuff return Ok
  • 单页中可以有多个 html、head 和 body 元素吗

    我有多个页面被合并到一个页面中 其中一些单独的页面有自己的 html head 和 body 元素 拥有这些会对页面的性能产生不利影响吗 FireBug 中的 DOM 似乎是正确的 每个元素只有一个 第一 不要这样做 浏览器是very如果涉
  • 闪亮的 R 操作按钮控制反应元素

    不确定我是否应该使用这个术语 基本上 我有一个反应函数 可以显示用户上传的 CSV 文件 我想使用action button触发情节生成过程 此时此刻 情节总是即时生成的 所以我想知道 在renderPlot函数 如何让action but
  • 基于类的通用 UpdateView 内联

    我有以下型号 class Cv models Model name models CharField name max length 250 objective models CharField objective max length 2
  • 删除 Windows 窗体中的标题栏

    如何删除窗口窗体顶部的蓝色边框 我不知道它的确切名称 您可以设置属性FormBorderStyle对于设计师中的任何一个人来说 或者在代码中 this FormBorderStyle System Windows Forms FormBor
  • 在 Windows 上通过 pip 使用 fastmath(gmp 或 mpir)构建 PyCrypto

    我通过 pip 在 Windows 上安装了 PyCrypto 但无法构建 Crypto PublicKey fastmath 因为找不到 GMP 我知道有一个二进制版本虚空 http www voidspace org uk python
  • 如何在调度代码时自动选择R中googlesheets4中的预授权帐户?

    我试图弄清楚自动允许 googlesheet4 包选择我的预授权帐户来下载特定谷歌表格的方法是什么 例如 我想每天运行以下一次 library googlesheets4 delta lt read sheet https docs goo
  • 找出这样一座塔中尽可能多的人

    首先我们看一下问题 马戏团正在设计一种塔式表演 由人们站在彼此的塔顶上组成 肩膀 出于实用和美观的原因 每个人都必须比他或她下面的人矮且轻 给定马戏团中每个人的身高和体重 编写一个方法来计算最大可能的人数 在这样的一座塔里 EXAMPLE