華為OD機試真題——開放日活動/取出盡量少的球(2025A卷:200分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

在這里插入圖片描述

2025 A卷 200分 題型

本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析;
并提供Java、python、JavaScript、C++、C語言、GO六種語言的最佳實現方式!

本文收錄于專欄:《2025華為OD真題目錄+全流程解析/備考攻略/經驗分享》

華為OD機試真題《開放日活動/取出盡量少的球》:


目錄

    • 題目名稱:開放日活動/取出盡量少的球
      • 題目描述
    • Java
      • 問題分析
      • 解題思路
      • 代碼實現
      • 代碼詳細解析
      • 示例測試
      • 綜合分析
    • python
      • 問題分析
      • 解題思路
      • 代碼實現
      • 代碼詳細解析
      • 示例測試
      • 綜合分析
    • JavaScript
      • 問題分析
      • 解題思路
      • 代碼實現
      • 代碼詳細解析
      • 示例測試
      • 綜合分析
    • C++
      • 問題分析
      • 解題思路
      • 代碼實現
      • 代碼詳細解析
      • 示例測試
      • 綜合分析
    • C語言
      • 問題分析
      • 解題思路
      • 代碼實現
      • 代碼詳細解析
      • 示例測試
      • 綜合分析
    • GO
      • 問題分析
      • 解題思路
      • 代碼實現
      • 代碼詳細解析
      • 示例測試
      • 綜合分析


題目名稱:開放日活動/取出盡量少的球


  • 知識點:二分查找、邏輯處理
  • 時間限制:1秒
  • 空間限制:256MB
  • 限定語言:不限

題目描述

某部門開展開放日活動,其中一個游戲是從桶里取球。游戲規則如下:

  • N 個容量相同的小桶等距排開,每個小桶默認裝有不同數量的小球,記錄在數組 bucketBallNums 中。
  • 游戲開始時,所有桶的小球總數不能超過 SUM。若超過,需對所有小桶設置統一的容量最大值 maxCapacity,并將超過此值的球取出,直到每個桶的球數不超過 maxCapacity

限制規則

  1. 總和未超限:若所有桶的總球數 ≤ SUM,返回空數組 []
  2. 總和超限:若總球數 > SUM,需計算 maxCapacity,并返回每個桶取出的小球數量數組。要求 maxCapacity 盡可能大,且取出球數最少。

輸入描述

  • 第一行為兩個正整數:SUMbucketBallNums 數組長度 N
  • 第二行為 N 個正整數,表示 bucketBallNums 的每個元素。

輸出描述

  • 返回一個數組,表示每個桶取出的小球數量。若無需操作,返回 []

示例
輸入:

14 7  
2 3 2 5 5 1 4  

輸出:

[0, 1, 0, 3, 3, 0, 2]  

說明

  • 總球數為 2+3+2+5+5+1+4=22 > 14。
  • 設置 maxCapacity=2,各桶保留球數為 [2,2,2,2,2,1,2],取出球數為 [0,1,0,3,3,0,2],總和為 9(22-13=9≤14)。

補充說明

  • 1 ≤ N ≤ 1e51 ≤ SUM ≤ 1e91 ≤ bucketBallNums[i] ≤ 1e9
  • 必須通過二分法高效求解 maxCapacity

Java

問題分析

我們需要在給定多個小桶的情況下,設置一個統一的最大容量 maxCapacity,使得調整后的總球數不超過 SUM。目標是找到最大的 maxCapacity 并計算每個桶需要取出的小球數量。


解題思路

  1. 初始判斷:計算所有桶的總球數,若不超過 SUM,直接返回空數組。
  2. 二分查找確定最大容量
    • 使用二分法在 0 到最大桶球數之間尋找滿足總球數條件的最大 maxCapacity
  3. 計算取出球數:根據找到的 maxCapacity,計算每個桶需要取出的小球數量。

代碼實現

import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int SUM = sc.nextInt();int N = sc.nextInt();int[] buckets = new int[N];long total = 0;int maxBall = 0;// 讀取桶的初始球數并計算總和及最大值for (int i = 0; i < N; i++) {buckets[i] = sc.nextInt();total += buckets[i];maxBall = Math.max(maxBall, buckets[i]);}// 初始總和未超限,直接返回空數組if (total <= SUM) {System.out.println("[]");return;}// 二分查找確定最大允許的 maxCapacityint left = 0, right = maxBall;int maxCapacity = 0;while (left <= right) {int mid = left + (right - left) / 2;long currentSum = 0;for (int num : buckets) {currentSum += Math.min(num, mid);}if (currentSum <= SUM) {maxCapacity = mid;   // 當前 mid 可能為可行解,嘗試更大的值left = mid + 1;} else {right = mid - 1;     // 當前 mid 導致總和過大,減小上限}}// 計算各桶需要取出的球數int[] result = new int[N];for (int i = 0; i < N; i++) {result[i] = buckets[i] - Math.min(buckets[i], maxCapacity);}// 格式化輸出System.out.println(Arrays.toString(result).replace(" ", ""));}
}

代碼詳細解析

  1. 輸入處理

    • 使用 Scanner 讀取輸入的 SUM 和桶的數量 N
    • 讀取每個桶的球數存入數組 buckets,并計算總球數 total 及最大值 maxBall
  2. 初始判斷

    • 若初始總球數 total 不超過 SUM,直接輸出空數組 []
  3. 二分查找

    • 范圍設定:左邊界 left 為 0,右邊界 right 為最大桶球數 maxBall
    • 循環條件:當 left <= right 時,計算中間值 mid,并計算當前 mid 對應的總球數 currentSum
    • 調整策略:若 currentSum <= SUM,說明可以嘗試更大的 mid,調整 left;否則調整 right
  4. 計算取出球數

    • 遍歷每個桶,計算其需要取出的小球數量,即原始球數減去調整后的球數。
  5. 輸出處理

    • 使用 Arrays.toString 將結果數組轉換為字符串,并去除空格以符合題目要求。

示例測試

示例1輸入:

14 7  
2 3 2 5 5 1 4  

輸出

[0,1,0,3,3,0,2]

解析:最大容量為 2,取出球數總和為 9,調整后總球數為 13 ≤ 14。

示例2輸入:

0 1  
1  

輸出

[1]

解析:總球數 1 > 0,設置最大容量為 0,取出所有球。

示例3輸入:

10 3  
5 5 5  

輸出

[0,0,0]

解析:初始總球數 15 > 10,最大容量設為 3,調整后總球數為 9 ≤ 10。


綜合分析

  1. 時間復雜度:O(N log M),其中 N 是桶的數量,M 是最大桶球數。二分查找的復雜度為 O(log M),每次查找需遍歷數組。
  2. 空間復雜度:O(N),存儲桶的球數數組和結果數組。
  3. 優勢
    • 高效查找:二分法快速定位最大容量。
    • 避免冗余計算:每次遍歷僅計算當前中間值的總球數。
  4. 適用場景:適用于大規模數據(桶數 ≤ 1e5)的場景,滿足時間限制要求。

python

問題分析

我們需要在給定多個桶的情況下,設置一個統一的最大容量 maxCapacity,使得調整后的總球數不超過 SUM。目標是找到最大的 maxCapacity 并計算每個桶需要取出的小球數量。


解題思路

  1. 初始判斷:計算所有桶的總球數,若不超過 SUM,直接返回空數組。
  2. 二分查找確定最大容量
    • 使用二分法在 0 到最大桶球數之間尋找滿足總球數條件的最大 maxCapacity
  3. 計算取出球數:根據找到的 maxCapacity,計算每個桶需要取出的小球數量。

代碼實現

def main():import sysinput 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85040.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85040.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85040.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我的3種AI寫作節奏搭配模型,適合不同類型寫作者

—不用內耗地高效寫完一篇內容&#xff0c;原來可以這樣搭配AI ?? 開場&#xff1a;為什么要“搭配節奏”寫作&#xff1f; 很多人以為用AI寫作&#xff0c;就是丟一句提示詞&#xff0c;然后“等它寫完”。 但你有沒有遇到這些情況&#xff1a; AI寫得很快&#xff0c;學境…

【知識點】第1章:程序設計基本方法

文章目錄 知識點整理計算機的概念程序設計語言Python 語言概述Python 語言開發環境配置程序的基本編寫方法 練習題簡答題判斷題 知識點整理 計算機的概念 計算機的定義&#xff1a;計算機是根據指令操作數據的設備。 計算機的兩個基本特性&#xff1a; 功能性&#xff1a;計…

const ‘不可變’到底是值不變還是地址不變

const的基礎規則 聲明時必須初始化? const a; // ? 報錯&#xff1a;Missing initializer in const declaration const b 10; // ? 正確塊級作用域?&#xff08;const 的作用域僅限于聲明它的代碼塊&#xff09; if (true) {const x 100; } console.log(x); // ? 報錯…

Netty 實戰篇:為自研 RPC 框架加入異步調用與 Future 支持

我們在上篇實現了一個輕量級 RPC 框架&#xff0c;現在要進一步優化 —— 加入異步響應支持&#xff0c;讓 RPC 通信變得真正高效、非阻塞、支持并發。 一、為什么需要異步調用&#xff1f; 上篇的 RPC 框架是“同步阻塞”的&#xff1a; 每次發送請求后&#xff0c;必須等待服…

for(auto a:b)和for(auto a:b)的區別

#include<iostream> using namespace std; int main() {string s( "hello world" );for (auto c:s)c t ;cout<<s<<endl; //結果為hello worldfor (auto &c:s)c t ;cout<<s<<endl; //結果為ttttttttttt }for(auto a:b)中b為一…

超級對話2:大跨界且大綜合的學問融智學應用場景述評(不同第三方的回應)之二

摘要&#xff1a;《人機協同文明升維行動框架》提出以HIAICI/W公式推動認知革命&#xff0c;構建三大落地場景&#xff1a;1&#xff09;低成本認知增強神經接口實現300%學習效率提升&#xff1b;2&#xff09;全球學科活動化閃電戰快速轉化知識體系&#xff1b;3&#xff09;人…

多方法解決MNIST數字識別

全連接層 import torch from torchvision import datasets, transforms import torch.nn as nn import torch.optim as optim from tqdm import tqdm # 用于進度條顯示 import os# 定義數據預處理(標準化+Tensor轉換) transform = transforms.Compose([transforms.ToTensor…

安裝 Node.js 和配置 cnpm 鏡像源

一、安裝 Node.js 方式一&#xff1a;官網下載&#xff08;適合所有系統&#xff09; 訪問 Node.js 官網 推薦選擇 LTS&#xff08;長期支持&#xff09;版本&#xff0c;點擊下載安裝包。 根據系統提示一步步完成安裝。 方式二&#xff1a;通過包管理器安裝&#xff08;建…

vue 自定義組件的事件綁定

基本知識點 &#x1f3af;什么是自定義事件 自定義事件是子組件向父組件發送消息的機制&#xff0c;通常用于通知父組件發生了某些行為或狀態變化。 &#x1f4cc; 基本語法 子組件觸發事件&#xff08;$emit&#xff09; this.$emit(事件名, 參數);或在 const emit de…

進程同步機制-信號量機制-記錄型信號量機制中的的wait和signal操作

wait和signal是記錄型信號量機制中用于實現進程同步與互斥的兩個重要操作&#xff0c; wait 操作 wait(semaphores *S) {S->value --;if (S->value<0) block(S->list) }請求資源&#xff1a;S->value --; 這一步表示進程請求一個單位的資源&#xff0c;將信號…

sd webui 安裝sd-webui-TemporalKit 加載報錯解決辦法

ModuleNotFoundError: No module named moviepy.editer 報錯內容類似上面截圖&#xff0c;我的已經解決&#xff0c;暫時無法截圖了 處理方法&#xff1a; 重點說明&#xff1a;插件目錄必須是TemporalKit&#xff0c;不能更改 進入到安裝目錄&#xff1a;extensions\Tempor…

decimal.js庫處理js浮點數精度誤差問題

1、經常遇到前端計算金額的時候出現精度誤差問題&#xff0c;導致前后端計算的金額不一致導致校驗過不去的情況&#xff0c;相信有不少人寫過Math.floor(e*100)/100來實現保留2位小數&#xff0c;但是這么寫就會出現上面的精度問題。怎么解決呢&#xff1f;這里使用的是decimal…

如何將 WSL 的 Ubuntu-24.04 遷移到其他電腦

在使用 Windows Subsystem for Linux (WSL) 時&#xff0c;我們可能會遇到需要將現有的 WSL 環境遷移到其他電腦的情況。無論是為了備份、更換設備&#xff0c;還是在不同電腦之間共享開發環境&#xff0c;掌握遷移 WSL 子系統的方法都是非常有用的。本文將以 Ubuntu-24.04 為例…

RISCV——內核及匯編

RISCV——內核及匯編 小狼http://blog.csdn.net/xiaolangyangyang 1、寄存器組&#xff08;ABI&#xff09; 2、異常及中斷 XV6 trap&#xff08;二&#xff09;RISCV中斷異常處理/定時器中斷 mie&#xff1a;中斷開關mip&#xff1a;中斷狀態mstatus.mie&#xff1a;全局中斷…

算法日記32:埃式篩、gcd和lcm、快速冪、乘法逆元

一、埃式篩&#xff08;計算質數&#xff09; 1.1、概念 1.1.1、在傳統的計算質數中&#xff0c;我們采用單點判斷&#xff0c;即判斷(2~sqrt(n))是否存在不合法元素&#xff0c;若存在則判否&#xff0c;否則判是 1.1.2、假設&#xff0c;此時我們需要求1~1000的所有質數&am…

使用 mysqldump 獲取 MySQL 表的完整創建 DDL

要獲取 MySQL 中某個表的完整創建 DDL&#xff08;僅結構&#xff0c;不含數據&#xff09;&#xff0c;可以使用 mysqldump 工具的以下命令&#xff1a; 基本命令格式 bash mysqldump -h [主機名] -u [用戶名] -p --no-data --single-transaction --routines --triggers --…

Debian 系統 Python 開發全解析:從環境搭建到項目實戰

Debian 系統 Python 開發全解析:從環境搭建到項目實戰 在當今數字化時代,Python 憑借其簡潔易讀的語法和強大的功能,成為了最受歡迎的編程語言之一。Debian 作為一款穩定、安全且開源的 Linux 操作系統,為 Python 開發提供了理想的環境。本文將詳細介紹在 Debian 系統上進…

實時技術對比:SSE vs WebSocket vs Long Polling

早期網站僅展示靜態內容&#xff0c;而如今我們更期望&#xff1a;實時更新、即時聊天、通知推送和動態儀表盤。 那么要如何實現實時的用戶體驗呢&#xff1f;三大經典技術各顯神通&#xff1a; ? SSE&#xff08;Server-Sent Events&#xff09;&#xff1a;輕量級單向數據…

【前端】es6新特性全解

第一章 簡介 1.1 ES6概述 1.1.1 ES6定義與發展歷程 1. ES6 定義 ES6 全稱 ECMAScript 6.0&#xff0c;它是 JavaScript 語言的下一代標準&#xff0c;對 JavaScript 語言進行了許多增強和擴展&#xff0c;帶來了更簡潔、更強大的語法特性。可以把 ES6 想象成是 JavaScript …

nlp中的頻率就是權重嗎

&#x1f522; 一、“頻率”是什么&#xff1f; 在 NLP 中&#xff0c;**詞頻&#xff08;frequency&#xff09;**通常指的是&#xff1a; 某個單詞或 token 在語料庫中出現的次數&#xff08;或比例&#xff09; 舉例&#xff1a; "The cat sat on the mat. The cat i…