华为OD机试 - 租车骑绿道 - 双指针(Java 2023 B卷 100分)

news/2024/7/20 16:54:49 标签: 华为od, 双指针, 学习方法, 送书

在这里插入图片描述

目录

    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
      • 1、输入
      • 2、输出
      • 3、说明
      • 4、双指针算法
    • 五、Java算法源码
    • 六、效果展示

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

一、题目描述

部门组织绿岛骑行团建活动,租用公共双人自行车骑行,每辆自行车最多坐两人、最大载重 M。

给出部门每个人的体重,请问最多需要租用多少双人自行车。

二、输入描述

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

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

0<m <= 200

0 < n <= 1000000

三、输出描述

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

四、解题思路

1、输入

7 6
3 4 5 3 3 7

2、输出

4

3、说明

  1. 自行车限重7
  2. 一共6人,按照体重排序,3 3 3 4 5 7
  3. 分配自行车,3 + 3 < 7,3 + 4 = 7,5 < 7,7 =7
  4. 故,一共4台。

4、双指针算法

  1. 先排序;
  2. 如果两人体重之和小于等于 m,则租一辆双人自行车;
  3. 如果两人体重之和大于 m,则租一辆单人自行车;

五、Java算法源码

/**
 * 双指针
 */
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String line1 = sc.nextLine();
    String line2 = sc.nextLine();
    String[] split = line1.split(" ");

    // 自行车限重 m
    int m = Integer.parseInt(split[0]);
    // 人数n
    int n = Integer.parseInt(split[1]);

    // 需要的自行车数量
    int count = 0;

    // 每个人的体重集合
    String[] arr = line2.split(" ");
    int[] nums = new int[arr.length];
    for (int i = 0; i < nums.length; i++) {
        nums[i] = Integer.parseInt(arr[i]);
    }

    // 按照体重排序
    Arrays.sort(nums);

    // 体重最轻的人
    int i = 0;
    // 体重最重的人
    int j = nums.length - 1;
    /**
     * 如果两人体重之和小于等于 m,则租一辆双人自行车。
     * 如果两人体重之和大于 m,则租一辆单人自行车。
     */
    while (i < j) {
        // 如果两个重量加起来大于m,那么右指针左移
        if (nums[i] + nums[j] > m) {
            j--;
            count++;
        } else {
            i++;
            j--;
            count++;
        }
    }
    // 左右指针相等时
    if (i == j) {
        count++;
    }
    System.out.println(count);
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.niftyadmin.cn/n/4989550.html

相关文章

C/C++学习——简单工厂模式

简单工厂模式 一、简单工厂模式二、C代码示例总结 一、简单工厂模式 工厂模式是一种常见的设计模式&#xff0c;它用于创建对象&#xff0c;但将对象的创建过程抽象出来&#xff0c;以便在不暴露对象的具体实现细节的情况下创建不同类型的对象。 二、C代码示例 #include <…

WPF工控机textbox获得焦点自动打开软键盘

1.通过nuget安装 osklib.wpf 2.在textbox getFoucs中敲入如下代码即可实现获得焦点弹出软键盘 private void txtPLC_IP_GotFocus(object sender, RoutedEventArgs e){try{// Osklib.OnScreenKeyboard.Close();Osklib.OnScreenKeyboard.Show();}catch (Exception ex){MessageB…

Windows笔记本电脑开机黑屏

Windows笔记本电脑开机黑屏 最近&#xff0c;我遇到了一件奇怪的事情。我的Windows笔记本电脑在开机时出现了一个黑屏&#xff0c;没有任何反应。我尝试了多种方法&#xff0c;包括重启和恢复出厂设置&#xff0c;但都无济于事。 我开始感到担心&#xff0c;因为这只会影响到…

多线程学习笔记

多线程学习笔记 一、概念 线程是一个程序内部的一条执行流程。 程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序。 多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)。 Java虚拟机允许应用程序同时执行多个执行线程。 每个线…

Java中转换流(InputStreamReader,OutputStreamWriter),打印流(PrintStream,PrintWriter)

转换流 InputStreamReader 和 OutputStreamWriter 是 Java 中用于字符流和字节流之间进行转换的转换流类。它们主要用于解决字符编码的问题&#xff0c;在字节流和字符流之间提供了桥梁&#xff0c;可以将字节流转换为字符流或将字符流转换为字节流。 InputStreamReader&#…

shell语法--数组相关

shell定义一个数组 在 shell 中&#xff0c;可以使用以下语法来定义一个数组&#xff1a; array_name(item1 item2 item3 ...) 其中&#xff0c;array_name 是数组的名称&#xff0c;item1、item2、item3 等是数组中的元素&#xff0c;它们之间用空格分隔。例如&#xff0c;以下…

不会画图也能创作角色动态贴图

标题&#xff1a;不会画图也能创作角色动态贴图&#xff1a;实现关键创作的秘诀 引言&#xff1a; 创作角色动态贴图是一种吸引人的方式&#xff0c;可以在社交媒体平台和聊天软件上展示个性化的表情和动作。然而&#xff0c;并不是每个人都具备绘画技巧&#xff0c;这可能成为…

推荐Java开发常用的工具类库google guava

Guava Guava是一个Google开源的Java核心库&#xff0c;它提供了许多实用的工具和辅助类&#xff0c;使Java开发更加简洁、高效、可靠。目前和hutool一起&#xff0c;是业界常用的工具类库。shigen也比较喜欢使用&#xff0c;在这里列举一下常用的工具类库和使用的案例。 参考…