题目描述
为了提升软件编码能力,小王制定了刷题计划,他选了题库中的 ( n ) 道题,编号从 0 到 ( n-1 ),并计划在 ( m ) 天内按照题目编号顺序刷完所有的题目(注意,小王不能用多天完成同一题)。
在小王的刷题计划中,小王需要用 ( time[i] ) 的时间完成编号 ( i ) 的题目。
此外,小王还可以查看答案,可以省去该题的做题时间。为了真正达到刷题效果,小王每天最多直接看一次答案。
我们定义 ( m ) 天中做题时间最多的一天耗时为 ( T ) (直接看答案的题目不计入做题总时间)。
请你帮小王求出最小的 ( T ) 是多少。
输入描述
- 第一行输入题目时间,用逗号分隔,表示每道题的时间 ( time )。
- 第二行输入一个整数 ( m ),表示几天内完成所有题目 ( ( 1 \leq m \leq 180 ) )。
输出描述
- 输出一个整数,表示最小的耗时 ( T )。
用例示例
示例 1
输入:
999,999,999
4
输出:
0
说明:
在前三天中,小王每天都直接看答案,这样他可以在三天内完成所有的题目并不花任何时间。
示例 2
输入:
1,2,2,3,5,4,6,7,8
5
输出:
4
说明:
第一天完成前 3 题,第 3 题看答案;第二天完成第 4 题和第 5 题,第 5 题看答案;第三天完成第 6 和第 7 题,第 7 题看答案;第四天完成第 8 题,直接看答案;第五天看答案。
python源码
# 输入获取
time_list = list(map(int, input().split(","))) # 将输入的时间字符串转换为整数列表
days = int(input()) # 读取天数
def is_feasible(max_time):
# 今天总耗时
total_time = 0
# 今天耗时最多的题目的耗时
highest_time = 0
# 是否可以申请帮助
can_request_help = True
# 第几天
current_day = 1
index = 0
while index < len(time_list):
total_time += time_list[index]
highest_time = max(highest_time, time_list[index])
if total_time > max_time:
# 如果做完当前题目,累计耗时超过了设定的max_time
if can_request_help:
# 如果可以申请帮助,那么就看耗时最长的题目的答案
total_time -= highest_time
# 使用了申请帮助的机会
can_request_help = False
# 继续做下一道题
index += 1
else:
# 如果不能申请帮助,则今天无法完成当前题目,只能放到明天做
# 切换到第二天
current_day += 1
# 重置今天的总耗时,最高耗时,以及申请帮助的机会
total_time = 0
highest_time = 0
can_request_help = True
else:
# 如果做完当前题目,累计耗时没有超过设定的max_time,则继续做下一道题
index += 1
return current_day <= days # 判断是否在规定的天数内完成所有题目
# 算法入口
def calculate_min_time():
# T的初始取值范围
lower_bound = 0
upper_bound = sum(time_list) - max(time_list) # 总耗时减去最高耗时的题目
# 二分查找
while lower_bound <= upper_bound:
# 取中间值尝试
middle_value = (lower_bound + upper_bound) >> 1
if is_feasible(middle_value):
# 如果 feasible,尝试减少时间
upper_bound = middle_value - 1
else:
# 否则增加时间限制
lower_bound = middle_value + 1
return lower_bound # 返回找到的最小耗时
# 算法调用
print(calculate_min_time()) # 输出最小耗时
关于华为OD
华为OD机考笔试的难度逐年提升,对于算法基础薄弱或工作后较少接触算法的候选人来说,通过率较低,因此全面刷题库是提高通过率的关键。以下是对华为OD职位的一些关键信息整理:
华为OD职位特点:
- 校准与可靠性:经过专业校准,确保高可靠性和长期稳定性。
- 集成与功耗:传感器通过单线串行接口集成,体积小,功耗低。
- 适用场景:适用于多种应用场景,具有4针单排引脚封装,方便连接。
- 工作内容:与正式员工一起在华为研究所办公,工作内容基本相同。
- 工作时间:弹性工作制,一般一二四需补工时至晚上20:30,三五正常下班,周末双休,月末周六加班双倍工资。
- 学历与经验:要求本科及以上学历,理工类专业优先,有编程语言基础和基础算法知识。
- 转正要求:工作满一年,通过专业级可信认证,绩效至少拿过一次A,部门有转正指标。
候选人常见关注问题:
- 外包职位:外包职位并非没有技术学习机会,关键在于个人能力和项目经验。
- OD转华为正编:需要连续两次绩效A,但并非绝对要求,关键在于个人能力和部门指标。
- OD稳定性:华为业务基本稳定,外包职位相比互联网和传统外包公司稳定性更高。
- OD试用期转正:一般要求通过入门级或工作级可信认证,通过率较高。
- OD转华为正编要求:工作满一年,通过专业级可信认证,绩效至少拿过一次A,部门有转正指标。
职位适合的候选人:
- 编程水平、项目经验薄弱,希望快速获得核心项目经验的毕业生。
- 工作经验丰富,希望突破现有薪资待遇和职业发展的专业人士。
- 有相关基础或经验,希望获得职业转型机会的候选人。
- 想加入华为但个人能力未达社招正编要求的候选人。
以下是针对华为OD机试E卷的高效备考指南,结合你的需求整理成结构化方案:
一、E卷题型构成分析
- 题目来源:1道E卷新题 + 2道D/A/B/C卷旧题(新旧比例约1:2)
- 分数分布:2道100分题(一星难度) + 1道200分题(二星难度)
- 通过标准:总分150分(非目标院校建议260+安全分,300+对定级/薪资有利)
二、高效刷题策略
1. 优先级排序
- Step1:优先刷E卷新题(题库持续更新中,关注最新动态)
- Step2:重点突破D/A/B/C卷高频旧题(占2/3题目,原题概率高)
- Step3:按算法分类专项练习(参考下文分类题单)
2. 分类刷题法(附高频题型)
算法分类 | 经典题型举例 | 刷题建议 |
---|---|---|
字符串处理 | 字符串反转、KMP算法、正则匹配 | 熟悉API,避免超时 |
动态规划 | 背包问题、最长递增子序列、编辑距离 | 掌握状态转移方程 |
DFS/BFS | 岛屿问题、迷宫路径、拓扑排序 | 模板题反复练习 |
贪心算法 | 区间调度、分糖果、跳跃游戏 | 验证最优性条件 |
二叉树 | 遍历、最近公共祖先、序列化 | 递归/迭代双解法 |
并查集 | 朋友圈问题、连通分量 | 路径压缩优化 |
滑动窗口 | 最长无重复子串、最小覆盖子串 | 边界条件敏感 |
3. 刷题技巧
- 限时训练:100分题40分钟/题,200分题60分钟/题(模拟考试压力)
- 闭卷编码:先独立完成再看解析,避免“虚假掌握”
- 查重规避:修改变量名、调整逻辑顺序、添加注释(直接复制易被查重)
三、考试实战技巧
-
环境准备
- 使用Chrome浏览器,关闭无关网页(防弹窗违规)
- IDE本地编码后粘贴(避免在线编辑器卡顿)
-
答题策略
- 先做100分题保底,再攻200分题(时间分配建议:40min+40min+60min)
- 自测用例覆盖边界值(如空输入、超大数组等)
-
异常处理
- 断网/死机可重新登录恢复进度
- 中途离开需申请(否则可能判作弊)
四、资源推荐
- 题库更新:关注官方动态及社区新题共享(如你提供的“哪吒题库”)
- 工具辅助:
- ChatGPT解析算法思路(但需自行编码实现)
- LeetCode按标签筛选相似题(如华为常考的BFS/DP题型)
五、注意事项
- 冷冻期:未通过需等待6个月才能再考
- 语言选择:Java/Python更易上手(但需熟记基础API)
- 代码规范:注释清晰,避免
ctrl+s
误操作