华为OD机试真题---租车骑绿道

news2024/11/29 9:04:41

一、题目描述

部门组织绿岛骑行团建活动。租用公共双人自行车,每辆自行车最多坐两人,做最大载重M。给出部门每个人的体重,请问最多需要租用多少双人自行车。
输入描述:
第一行两个数字m、n,分别代表自行车限重,部门总人数。第二行,n个数字,代表每个人的体重,体重都小于等于自行车限重m。

0<m<=200
0<n<=1000000

输出描述:
最小需要的双人自行车数量。
示例1
输入输出示例仅供调试,后台判题数据一般不包含示例输入

3 4
3 2 2 1

输出

3

二、解题思路

此问题可以通过贪心算法解决。核心思想是尽可能让两个人一起骑一辆车,从而减少所需的自行车总数。具体步骤如下:

  • 排序:首先将所有人的体重从小到大排序。
  • 双指针:使用两个指针,一个指向最轻的人(lightest),另一个指向最重的人(heaviest)。
  • 匹配:尝试将最轻的人和最重的人配对。如果他们的体重之和不超过自行车的最大载重m,则他们可以共乘一辆车,同时移动两个指针;否则,只有最重的人单独乘坐一辆车,移动指向最重者的指针。
  • 计数:每次成功配对或单独安排一个人后,自行车的数量增加1。
  • 终止条件:当两个指针相遇或交错时,结束循环,此时的计数即为所需自行车的最小数量。

三、代码实现

import java.util.Arrays;
import java.util.Scanner;

public class BikeRental {

    /**
     * 计算最少需要租用的双人自行车数量。
     * @param m 自行车的最大载重。
     * @param weights 一个整数数组,表示每个人的实际体重。
     * @return 最少需要租用的双人自行车数量。
     */
    public static int minBikesRequired(int m, int[] weights) {
        // 对体重数组进行排序
        Arrays.sort(weights);
        // 指向最轻的人
        int lightest = 0;
        // 指向最重的人
        int heaviest = weights.length - 1;
        // 记录需要的自行车数量
        int bikes = 0;

        while (lightest <= heaviest) {
            // 当最轻和最重的人能共乘一辆车时
            if (weights[lightest] + weights[heaviest] <= m) {
                // 移动轻者指针
                lightest++;
            }
            // 无论是否共乘,重者指针都要移动
            heaviest--;
            // 每次循环自行车数量加1
            bikes++;
        }

        return bikes;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 自行车的最大载重
        int m = scanner.nextInt();
        // 人数
        int n = scanner.nextInt();
        int[] weights = new int[n];
        for (int i = 0; i < n; i++) {
            // 读取每个人的体重
            weights[i] = scanner.nextInt();
        }

        int result = minBikesRequired(m, weights);
        // 输出结果
        System.out.println("最小需要的双人自行车数量:"+result);

        scanner.close();
    }
}

四、代码与运行示例解析

代码解析
  1. 输入读取

    • 程序首先通过Scanner对象从标准输入读取两个整数:自行车的最大载重m和部门总人数n
    • 接着,读取n个整数,表示每个人的体重,并将这些体重存储在数组weights中。
  2. 方法调用

    • 调用minBikesRequired方法,传入最大载重m和体重数组weights,该方法返回所需的最少双人自行车数量。
  3. 方法实现

    • minBikesRequired方法中,首先对体重数组进行排序。
    • 使用两个指针lightestheaviest分别指向体重数组的最轻和最重的人。
    • 通过一个循环,尝试将最轻和最重的人配对在同一辆自行车上(如果他们的体重之和不超过最大载重m)。
    • 在每次循环中,无论是否成功配对,都将heaviest指针向左移动(表示最重的人已经被处理),并且自行车数量bikes加一。
    • 如果最轻和最重的人能够配对,则也将lightest指针向右移动(表示最轻的人也被处理)。
    • lightest指针超过heaviest指针时,循环结束,此时bikes的值即为所需的最少双人自行车数量。
运行示例解析

输入

3 4
3 2 2 1

步骤

  1. 输入读取

    • m = 3
    • n = 4
    • weights = [3, 2, 2, 1]
  2. 排序

    • 排序后的weights = [1, 2, 2, 3]
  3. 配对与计数

    • 初始化lightest = 0heaviest = 3bikes = 0
    • 第一轮循环
      • weights[lightest] + weights[heaviest] = 1 + 3 = 4(超过m,不能配对)
      • heaviest减一,变为2
      • bikes加一,变为1
    • 第二轮循环
      • weights[lightest] + weights[heaviest] = 1 + 2 = 3(等于m,可以配对)
      • lightest加一,变为1
      • heaviest减一,变为1
      • bikes加一,变为2
    • 第三轮循环
      • weights[lightest] + weights[heaviest] = 2 + 2 = 4(超过m,不能配对)
      • heaviest减一,变为0
      • bikes加一,变为3
      • 循环结束(因为lightest已经大于heaviest
  4. 输出结果

    • 输出最小需要的双人自行车数量:3

五、注意事项

  • 在上述示例中,虽然第三轮循环中的两个人(体重都为2)不能共乘一辆自行车,但由于我们已经为他们各自分配了一辆自行车(在第二轮和第三轮循环中),所以最终结果仍然是3辆自行车。
  • 这种方法的关键在于通过排序和双指针技术来优化配对过程,从而尽量减少所需的双人自行车数量。

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

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

相关文章

GDPU Android移动应用 数据存储

又是学到了数据持久化。 登录界面 题外话&#xff1a;有无动画大佬带带呀&#xff0c;前端移动端可免( •̀ .̫ •́ )&#xff0c;合作可私信哦。 1.用户登陆和“记住我”功能 该内容拥有两个Activity活动视图&#xff1a; &#xff08;1&#xff09;LoginActivity&#x…

Java算法OJ(11)双指针练习

目录 1.前言 2.正文 2.1存在重复数字 2.1.1题目 2.1.2解法一代码 解析&#xff1a; 2.1.3解法二代码 解析&#xff1a; 2.2存在重复数字plus 2.2.1题目 2.2.2代码 2.2.3解析 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来给大家分享双指针算法的相关练习&…

天锐绿盾加密软件与Ping32联合打造企业级安全保护系统,确保敏感数据防泄密与加密管理

随着信息技术的飞速发展&#xff0c;企业在日常经营过程中产生和处理的大量敏感数据&#xff0c;面临着越来越复杂的安全威胁。尤其是在金融、医疗、法律等领域&#xff0c;数据泄漏不仅会造成企业巨大的经济损失&#xff0c;还可能破坏企业的信誉和客户信任。因此&#xff0c;…

Git上传本地项目到远程仓库(gitee/github)

目录 序言一、创建git本地版本库二、连接远程仓库&#xff08;以gitee为例&#xff09;三、将项目提交到git&#xff08;本地&#xff09;版本库1.由工作区添加到暂存区2.由暂存区添加到版本库 四、将代码由本地仓库上传到 gitee远程仓库1.获取远程库与本地同步2.把当前分支 ma…

C7.【C++ Cont】范围for的使用和auto关键字

目录 1.知识回顾 2.范围for 格式 使用 运行结果 运行过程 范围for的本意 作用 注意 3.底层分析范围for的执行过程 反汇编代码 分析 4.auto关键字 格式 基本用法 在范围for中使用auto 1.知识回顾 for循环的使用参见25.【C语言】循环结构之for文章 2.范围for C…

【仓颉学习02】编译后运行报错:“由于找不到libcanjie-runtime.dll,无法继续执行代码。重新安装程序可能会解决此问题。”

敲了段《仓颉语言实践》&#xff08;张磊著&#xff09;书上的代码&#xff0c;如下&#xff1a; package test //coding:utf-8struct Employee{var name:Stringprivate var realSalary:Float64public Employee(name:String,realSalary:Float64){this.namenamethis.realSalary…

AI智算-正式上架GPU资源监控概览 Grafana Dashboard

下载链接 https://grafana.com/grafana/dashboards/22424-ai-gpu-20241127/

LINUX2.4.x网络安全框架

在分析LINUX2.4.x网络安全的实现之前先简介一下它里面包括的几个重要概念&#xff1a;netfilter、iptables、match、target、nf_sockopt_ops、网络安全功能点的实现。详解会在后面的分析中讲到。 首先是netfilter&#xff0c;它定义了协议栈中的检查点和在检查点上引用的数据结…

【博主推荐】C# Winform 拼图小游戏源码详解(附源码)

文章目录 前言摘要1.设计来源拼图小游戏讲解1.1 拼图主界面设计1.2 一般难度拼图效果1.3 普通难度拼图效果1.4 困难难度拼图效果1.5 地域难度拼图效果1.6 内置五种拼图效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载结束语 前言 在数字浪潮汹涌澎湃的时代&#xff0c;程序开…

pytorch错误: 找不到指定的模块 Error loading “torch_python.dll“ or one of its dependencies

省流&#xff1a;python(3.12.7) 和 pytorch(2.4.0)版本不配套 问题 起因是看到了这本书《Build a Large Language Model (From Scratch) 》&#xff0c;是2024年9月新出的&#xff0c; 作者 Sebastian Raschka&#xff0c;想要按照作者给出的步骤来手搓一个大语言模型&#…

渗透测试学习笔记(一)渗透测试方法论

一.渗透测试方法论 渗透测试方法论是制定实施信息安全审计方案时&#xff0c;需要遵循的规则&#xff0c;惯例和过程。人们在评估网络&#xff0c;应用&#xff0c;系统或者三者组合的安全状态时&#xff0c;不断摸索各种实务的理念和成熟的做法&#xff0c;并总结了一套理论-…

【论文阅读】如何高效阅读和理解学术论文

【论文阅读】如何高效阅读和理解学术论文 写在最前面一、为什么需要系统的阅读方法&#xff1f;二、阅读论文的11步方法三、实践示例四、常见问题解答五、结语 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持…

Java 基础面试 题(Java Basic Interview Questions)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

HCIE IGP双栈综合实验

实验拓扑 实验需求及解法 本实验模拟ISP网络结构&#xff0c;R1/2组成国家骨干网&#xff0c;R3/4组成省级网络&#xff0c;R5/6/7组成数据中 心网络。 配置所有ipv4地址&#xff0c;请自行测试直连。 R1 sysname R1 interface GigabitEthernet0/0/0ip address 12.1.1.1 255.…

利用阿里云镜像仓库和 Github Action 同步镜像

利用阿里云镜像仓库和 Github Action 同步镜像 由于某些未知原因,国内无法直接从 DockerHub 拉取镜像,在不使用 VPN 等违法工具的情况下,可以利用 GitHub 的 Action 流水线功能,将镜像推送到阿里云的个人镜像仓库中。 这种方式相较于其他方式虽然相对麻烦,但好在免费,且实…

HarmonyOS4+NEXT星河版入门与项目实战(22)------动画(属性动画与显示动画)

文章目录 1、属性动画图解2、案例实现-小鱼移动游戏1、代码实现2、代码解释3、资源图片4、实现效果3、显示动画4、案例修改-显示动画5、总结1、属性动画图解 这里我们用一张完整的图来汇整属性动画的用法格式和使用的主要属性范围,如下所示: 2、案例实现-小鱼移动游戏 1、代…

csp-j初赛模拟试题(解析)

题目&#xff1a; 在 C中&#xff0c;以下哪个关键字用于实现多态性&#xff1f; A. virtualB. staticC. externD. const 以下数据结构中&#xff0c;不属于线性结构的是&#xff08; &#xff09;。 A. 栈B. 队列C. 二叉树D. 链表 一个有 8 个顶点的无向图&#xff0c;若每个…

使用R的数据包快速获取、调用各种地理数据

数据一直是科学研究绕不开的话题&#xff0c;为了方便快捷的获取各种地理数据&#xff0c;许多R包被开发出来&#xff0c;今天介绍一些方便快捷的数据R包。 rnaturalearth 包使 Natural Earth 数据可用。自然地球特征包括 1&#xff1a;10m、1&#xff1a;50m 和 1&#xff1a…

C语言——指针初阶(一)

目录 一.什么是指针&#xff1f;&#xff1f;&#xff1f; 指针是什么&#xff1f; 指针变量&#xff1a; 总结&#xff1a; 总结&#xff1a; 二.指针和指针类型 指针-整数&#xff1a; 总结&#xff1a; 指针的解引用 总结&#xff1a; 三.野指针 如何规避野指针 往期…

游戏引擎学习第22天

移除 DllMain() 并成功重新编译 以下是对内容的详细复述与总结&#xff1a; 问题和解决方案&#xff1a; 在编译过程中遇到了一些问题&#xff0c;特别是如何告知编译器不要退出程序&#xff0c;而是继续处理。问题的根源在于编译过程中传递给链接器的参数设置不正确。原本尝试…