建设部网站网站建设学校

江山市强派门业有限公司 2026/09/09 17:57:06

(新卷,100分)- 租车骑绿岛(Java & JS & Python)

题目描述

部门组织绿岛骑行团建活动。租用公共双人自行车,每辆自行车最多坐两人,最大载重M。
给出部门每个人的体重,请问最多需要租用多少双人自行车。

输入描述

第一行两个数字m、n,分别代表自行车限重,部门总人数。

第二行,n个数字,代表每个人的体重,体重都小于等于自行车限重m。

  • 0<m<=200
  • 0<n<=1000000
输出描述

最小需要的双人自行车数量。

用例
输入3 4
3 2 2 1
输出3
说明
题目解析

本题需要最少的车辆,即尽可能组合出重量小于等于m的两人组。

首先,我们可以将所有人按体重升序,然后将最大体重和m比较,若最大体重大于等于m,则这个人只能一人占一辆车,车数量count++,然后将最大体重弹出,继续将剩下体重中最大的和m比较,逻辑同上,直到最大体重小于m时,停止弹出。

在剩余体重中,我们利用双指针,i指针指向最小体重,j指针指向最大体重,然后组合它们,即arr[i]+arr[j],和m比较,若小于等于m,则说明这两个人可以共享一辆车,车数量count++,然后i++,j--。如果arr[i]+arr[j]>m,则说明两个人无法共享一辆车,我们只能优先将这里车分配给较大体重的人,此时车数量count++,然后j--。

按上面逻辑移动双指针,最后可能会出现两种情况:

  • i > j 此情况下所有人均分配到了车,因此可以直接输出count作为题解
  • i === j 此情况下还有一个人未分配到车,因此需要count++,为这个人单独分配一辆车
JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines = []; rl.on("line", (line) => { lines.push(line); if (lines.length === 2) { const [m, n] = lines[0].split(" ").map(Number); const arr = lines[1].split(" ").map(Number); console.log(getResult(arr, m, n)); lines.length = 0; } }); function getResult(arr, m, n) { arr.sort((a, b) => a - b); let count = 0; // while (arr.at(-1) >= m) { // count++; // arr.pop(); // } let i = 0; let j = arr.length - 1; while (i < j) { if (arr[i] + arr[j] <= m) i++; j--; count++; } if (i === j) count++; return count; }
Java算法源码
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } System.out.println(getResult(arr, m)); } public static int getResult(int[] arr, int m) { Arrays.sort(arr); int count = 0; int i = 0; int j = arr.length - 1; while (i < j) { if (arr[i] + arr[j] <= m) i++; j--; count++; } if (i == j) count++; return count; } }
Python算法源码
# 输入获取 m, n = map(int, input().split()) arr = list(map(int, input().split())) # 算法入口 def getResult(arr, m, n): arr.sort() count = 0 i = 0 j = n - 1 while i < j: if arr[i] + arr[j] <= m: i += 1 j -= 1 count += 1 if i == j: count += 1 return count # 算法调用 print(getResult(arr, m, n))
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

万州网站建设顺德网站建设

简介《RAG技术演进与2025年趋势分析》全面回顾了RAG技术的成就与挑战,并展望了五大发展方向:与Agent系统深度融合、多模态RAG体系化建设、GraphRAG精细化动

2026/06/30 13:10:34

网站建设策划书网站建设多少钱

第一章:Open-AutoGLM 电影票AI选座机器人概述Open-AutoGLM 是一款基于大语言模型与自动化决策引擎构建的智能电影票选座机器人系统,专为优化用户观影体验

2026/06/30 11:02:23

网站建设多少钱长春网站建设

Knuff终极证书转换指南:从PKCS12到PEM的完整流程【免费下载链接】Knuff项目地址: https://gitcode.com/gh_mirrors/knu/KnuffKnuf

2026/06/30 13:17:05

网站建设心得晋江网站建设

数据迁移与备份及Windows应用迁移至Linux指南在数字化的时代,数据迁移和应用迁移是许多用户会面临的问题。无论是从Windows迁移至Linux,还是进行日常的数据备份,都需要掌握一定的方法和工

2026/06/30 11:17:24

洛阳网站建设涪陵网站建设

Elasticvue:终极轻量级管理工具全能操作指南【免费下载链接】elasticvueElasticsearch gui for the browser项目地址: https://gi

2026/06/30 12:20:00

网站建设流程旅游网站建设方案

随着人工智能的不断发展,越来越多的公司推出了他们的AI模型,用来提高工作效率,解决实际问题。最近,GPT-5.2打工人版和Gemini 3 Pr

2026/06/30 13:20:05

甘肃省建设厅网站贵州建设厅网站

简介本文提出了医疗AI智能体的六大核心模块框架:感知、对话接口、交互系统、工具集成、记忆学习和推理。通过七种专业智能体类型(如ReAct+RAG、自学习、记忆增强等

2026/06/30 13:37:36

免费企业网站建设凯里网站建设

还在为金融预测模型的高昂算力成本而犹豫吗?今天我要分享一个革命性的解决方案——仅需2GB显存,就能在消费级GPU上部署专业的金融时序预测模型。无论你是个人投资者还是量化团队

2026/06/30 13:46:37

开县网站建设建设官方网站

想要完全掌控自己的原神世界吗?KCN-GenshinServer为你提供了一键式解决方案,无需任何技术背景,仅需简单几步操作即可拥有专属服务器。无论你是想要个

2026/06/30 13:17:05

南京网站建设娄底网站建设

在亚马逊的激烈竞争中,一款产品能否成功,从来不是凭直觉或运气,成熟的卖家都深知,这背后是一套严谨的系统性评估逻辑,它要求你在市场的

2026/06/30 10:30:20