华为OD机试-食堂供餐-二分法(JAVA 2025B卷)

在这里插入图片描述在这里插入图片描述

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

public class DemoTest3 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            in.nextLine();
            int b = in.nextInt();
            in.nextLine();
            int[] arr = new int[a];
            for(int i = 0;i<a;i++){
                arr[i] = in.nextInt();
            }
            Arrays.sort(arr);
            System.out.println(solve(a,b,arr));
        }
    }

    private static int solve(int a, int b, int[] arr) {
        int left =1,right = arr[arr.length-1];
        while(left<right){
            int mid = left+(right-left)/2;
            if(ok(arr,b,mid)){
                right = mid;
            }else{
                left = mid+1;
            }
        }
        return left;
    }

    private static boolean ok(int[] arr, int b, int mid) {
        int temp = b;
        for(int i =0;i<arr.length;i++){
            if (temp>arr[i]) {
                temp = temp-arr[i] + mid;
            }else{
                return false;
            }
        }
        return true;
    }


}

### 华为OD Java 题目 2025 准备资料 #### 考核范围概述 华为OD主要考察候选人的算法设计能力、数据结构掌握程度以及实际编码水平。对于选择Java作为编程语言的考生来说,重点在于熟悉Java的核心语法特性及其在解决具体问题中的应用[^1]。 #### 基础知识点复习 - **基本语法**: 掌握变量定义、控制流语句(如if...else, switch-case), 循环(for, while),函数声明与调用等基础知识。 - **面向对象概念(OOP)**: 类和对象的概念理解;继承(Inheritance)、封装(Encapsulation)、多态(Polymorphism)的应用场景分析。 - **集合框架(Collection Frameworks)**: ArrayList, LinkedList, HashSet, HashMap等常用容器类的功能区别及性能特点比较[^1]。 #### 数据结构与算法练习方向 针对可能涉及的数据结构部分,应着重加强以下几个方面的训练: - 数组(Array): 各种查找方法实现(二分法Binary Search),排序操作实践(Merge Sort, Quick Sort)- 字符串(String Processing): 子串匹配KMP算法原理讲解并动手编写相应程序片段。 -(Graph Theory): BFS(Breadth First Search)/DFS(Depth First Search)遍历逻辑推导过程演示。 以下是几个典型例题供参考学习: ```java // 示例一:反转字符串单词顺序 public String reverseWords(String s){ StringBuilder sb=new StringBuilder(); int n=s.length(),i=0; while(i<n){ if(s.charAt(i)==' '){ i++; continue;} int j=i; while(j<n && s.charAt(j)!=' ')j++; if(sb.length()!=0)sb.append(' '); sb.append(new StringBuilder(s.substring(i,j)).reverse()); i=j; } return sb.toString(); } ``` ```java // 示例二:判断链表是否有环 public boolean hasCycle(ListNode head){ Set<ListNode> set=new HashSet<>(); ListNode cur=head; while(cur!=null){ if(set.contains(cur))return true; else{ set.add(cur); cur=cur.next; } } return false; } ``` #### 实战技巧分享 为了更好地适应考环境,在日常刷题过程中可以尝以下策略提升效率: - 定期参与在线评测平台LeetCode,HackerRank上的模拟测活动积累经验; - 对于每道完成后的习题都要做深入剖析总结错误原因及时改正不足之处; - 形成个人专属错题本记录高频考点便于考前集中突击复习[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值