刚考完 Uber OA,趁热分享一波攒人品!本场一共三道题,整体难度中等偏上:基础扎实、做过同类题型的会很顺;只零散刷题、没总结过套路的很容易卡壳。下面直接上题目 + 核心思路 + 考点,不废话全是干货。

第一题:最小幂次运算次数
题目描述
给定正整数 n,每次操作可以加或减一个 2 的整数次幂(2^i,i≥0)。求把 n 变成 0 所需的最少操作次数。
核心思路
本质是二进制 + 连续 1 合并贪心。
- 把 n 转成二进制,观察连续 1 的段:
- 单个 1:直接加减一次即可 → 1 次
- 连续 k 个 1:可以用
+1进位,把连续 1 变成 1 个 1,再减 → 等价 2 次
- 从低位往高位扫,合并连续 1,统计次数即可。
考点
- 二进制位运算
- 贪心思想
- 边界:n=0、n=1、全 1 串(如 7=111)
第二题:商品最终定价计算(经典单调栈)
题目描述
给定价格数组,每个商品最终价 = 原价 − 右侧第一个 ≤ 它的价格,没有则为原价。要求输出:
- 所有商品最终价的总和
- 按原价出售的商品 0-based 索引(升序空格分隔)
核心思路
标准「下一个更小 / 等于元素」,单调栈秒解:
- 维护一个从栈底到栈顶单调递增的栈
- 从右往左遍历,对每个位置找到右侧第一个 ≤ 当前值的数
- 计算最终价,统计总和
- 记录没有找到更小值的下标,最后输出
考点
- 单调栈模板题
- 下一个更小 / 更大元素
- 细节:是 ≤ 不是 <,索引输出顺序
第三题:平衡数字判定(区间连续性)
题目描述
给定 1~n 的排列 p。如果存在区间 [l, r],使得区间内数字恰好是 1~k 的排列,则称 k 是平衡数字。对每个 1≤k≤n,判断是否平衡,返回长度为 n 的二进制字符串(第 k 位 1/0)。
核心思路
利用排列的连续性性质:
- 在排列中,一段数字是 1~k 的排列 ⇨
- 数字恰好包含 1~k
- max - min + 1 == 长度
- 记录每个数字出现的位置 pos [x]
- 对每个 k,维护当前 1~k 的min_pos 和 max_pos
- 如果
max_pos - min_pos + 1 == k,说明存在这样的区间 → 平衡,记为 1,否则 0
考点
- 排列性质
- 区间连续判断
- 线性维护最值,O (n) 做法
整体难度与备考建议
- 题量:3 题
- 难度:中等偏上
- 高频考点:
- 位运算 / 贪心
- 单调栈(大厂 OA 重灾区)
- 排列 + 区间连续性
很多同学不是不会做,而是:
- 模板不熟,现场推太慢
- 时间分配崩
- 细节写错(索引、边界、符号)
如果你在准备 Uber / TikTok / Microsoft 等大厂 OA,真的建议针对性练真题 + 模板,而不是盲目刷 LeetCode 冷门题。
需要完整代码版答案 + 同类型押题的同学可以留言,我后续再更~祝大家都 OA 稳过,offer 多多!

290

被折叠的 条评论
为什么被折叠?



