Uber OA 真题分享|单调栈 + 区间连续性判断思路拆解|三题完整复盘

45Times read
No Comments

Uber OA 刚结束,趁热来写个分享攒人品。我这场是三道题的结构,整体难度大概是:基础扎实的人会觉得顺滑,平时只刷零散题目的人可能会有点卡。下面说下思路。

题目 1:最小幂次运算次数

给定正整数 n,每次操作可对其加或减一个 2 的整数次幂(2^ii≥0)。

要求:计算将 n 变为 0 所需的最少操作次数。

题目 1:最小幂次运算次数

解题思路

加减操作目标为最大化消除二进制表示中的 1,当末两位为 11 时执行 +1 操作,可消除连续的 1,当末两位为 01 时执行 -1 操作,可消除单个 1 ,当末位为 0 时直接右移一位 持续检查数值的二进制末两位:11 → 执行 +1,01 → 执行 -1 ,0X → 右移一位 直至数值为零,统计总操作次数。

题目 2:商品最终定价计算

给定商品价格数组,每个商品的最终价 = 原价 – 右侧第一个≤它的价格(无则按原价)。

要求:输出所有商品最终价的总和,以及按原价出售的商品的 0-based 索引(升序空格分隔)。

题目 2:商品最终定价计算

解题思路

对于每个 p[i] 而言,如果他右边有小于等于他的,那么找到第一个小于等于他的 p[j],p[i] 的价值会变为 p[i] – p[j],否则不变,让我们输出最终的所有价值和还有没有变的物品下标,就用单调栈维护一下就行了。

题目 3:平衡数字判定

给定 1~n 的排列数组 p,若存在区间 [l,r],使得区间内数字恰好是 1~k 的排列,则 k 是平衡数字。

要求:对 1~n 的每个 k 判定是否平衡,返回长度为 n 的二进制字符串(第 k 位为 1 表示平衡,0 反之)。

题目 3:平衡数字判定

解题思路

考虑让我们求 1~n,对于每个 i,[1,i] 是不是全出现在一个区间里,并且没有别的数,很显然 [1,i] 的是可以往 [1,i + 1] 去推的,并且只和 [1,i]的左右端点 [l,r] 有关,就维护一个最左和最右,如果 r – l + 1 恰好等于 i 那么就合法,否则就不合法。

了解更多

如果你正在准备 Uber / TikTok / Microsoft 等大厂 OA,建议一定要提前做针对性训练。很多同学不是不会做,而是模型不熟、时间分配不合理、细节不够稳。我们提供系统化真题整理、OA无痕助攻 ,帮助你在真实考试节奏下稳定发挥,提升通过率。

author avatar
Jory Wang Amazon资深软件开发工程师
Amazon 资深工程师,专注 基础设施核心系统研发,在系统可扩展性、可靠性及成本优化方面具备丰富实战经验。 目前聚焦 FAANG SDE 面试辅导,一年内助力 30+ 位候选人成功斩获 L5 / L6 Offer。
End of text
 0