← 返回博客列表
Uber

🚨【Uber OA 真题流出】6道高频题全解析:资源转换、报纸排版、水果配对、数字魔法!

2026-01-13

Uber OA 估计是白嫖的 OA,很容易拿到,目前我们已经帮助大量客户秒杀了此次 OA!

📊 题目规律分析

根据我们大量实战经验总结:

没有自信的同学可以考虑找我们进行代写,黑科技无视摄像头和共享屏幕,无视 AI 监考检测,帮您顺利进面试~

我们长期稳定承接各大科技公司如 Uber、TikTok、Google、Amazon 等的 OA 笔试代写服务,确保满分通过。如有需求,请随时联系我们。


✅ 题目 1:Resource Conversion Simulation(资源转换模拟)

题目描述

每个周期会发生以下三种事件之一:

计算流程停止前会经过多少个周期。

时间复杂度要求: O(resources.length ÷ conversionRate)

示例

输入: resources = ["A", "A", "A", "A", "P", "P", "P", "P"], conversionRate = 2
输出: 13

oavoservice 满分解法

def solution(resources, conversionRate):
    resources = list(resources)
    cycles = 0
    
    while True:
        # 统计 P 的数量
        p_count = sum(1 for r in resources if r == 'P')
        
        # 选项 1: 转换 P 为 A
        if p_count >= conversionRate:
            # 移除最后 conversionRate 个 P
            removed = 0
            i = len(resources) - 1
            while removed < conversionRate and i >= 0:
                if resources[i] == 'P':
                    resources.pop(i)
                    removed += 1
                i -= 1
            # 在开头添加 A
            resources.insert(0, 'A')
            cycles += 1
        # 选项 2: A 变 P
        elif 'A' in resources:
            # 找到最后一个 A 并变为 P
            for i in range(len(resources) - 1, -1, -1):
                if resources[i] == 'A':
                    resources[i] = 'P'
                    break
            cycles += 1
        # 选项 3: 停止
        else:
            break
    
    return cycles

核心考点: 模拟 + 状态转换逻辑


✅ 题目 2:Newspaper Text Formatting(报纸文本排版)

题目描述

你需要格式化报纸页面上的文本,要求如下:

排版规则:

  1. 每个段落从新行开始
  2. 按顺序添加段落中的单词,单词之间用 1 个空格分隔
  3. 不能拆分单词
  4. 如果行末有剩余空间,居中对齐文本:
    • 偶数剩余 → 前后空格相等
    • 奇数剩余 → 额外空格放在右边
  5. 在页面的上、下、左、右添加 * 字符的矩形边框

示例

输入:
paragraphs = [["hello", "world"], ["How", "areYou", "doing"], ["Please", "look", "and", "align", "to", "the", "center"]]
width = 16

输出:
[
  "******************",
  "*  hello world   *",
  "*How areYou doing*",
  "*Please look and *",
  "* align to the   *",
  "*    center      *",
  "******************"
]

oavoservice 满分解法

def solution(paragraphs, width):
    result = []
    border = '*' * (width + 2)
    result.append(border)
    
    for paragraph in paragraphs:
        lines = []
        current_line = []
        current_length = 0
        
        for word in paragraph:
            # 检查是否能添加到当前行
            space_needed = len(word) if not current_line else len(word) + 1
            if current_length + space_needed <= width:
                current_line.append(word)
                current_length += space_needed
            else:
                # 当前行满了,保存并开始新行
                if current_line:
                    lines.append(' '.join(current_line))
                current_line = [word]
                current_length = len(word)
        
        # 添加最后一行
        if current_line:
            lines.append(' '.join(current_line))
        
        # 居中对齐每一行
        for line in lines:
            leftover = width - len(line)
            left_padding = leftover // 2
            right_padding = leftover - left_padding
            formatted_line = '*' + ' ' * left_padding + line + ' ' * right_padding + '*'
            result.append(formatted_line)
    
    result.append(border)
    return result

核心考点: 字符串处理 + 贪心换行 + 居中对齐逻辑


✅ 题目 3:Fruit Pair Segments(水果配对区段)

题目描述

你是一个大型果园的检查员。收获后,水果被放在传送带上。你需要识别传送带上具有足够重复水果数量的区段。

计算传送带上可以形成至少 k 对相同水果的连续区段数量。每个位置的水果在计数时最多只能属于一对。

示例

输入: fruits = [0, 1, 0, 1, 0], k = 2
输出: 3

解释:
有 3 个有效区段:
- [0,1,0] 的索引 0-2
- [1,0,1] 的索引 1-3
- [0,1,0] 的索引 2-4
每个区段都可以使用非重叠位置形成至少 2 对

oavoservice 满分解法

from collections import Counter

def solution(fruits, k):
    n = len(fruits)
    count = 0
    
    for i in range(n):
        freq = Counter()
        pairs = 0
        for j in range(i, n):
            fruit = fruits[j]
            freq[fruit] += 1
            # 当频次变为偶数时,形成一对
            if freq[fruit] % 2 == 0:
                pairs += 1
            
            if pairs >= k:
                count += 1
    
    return count

核心考点: 滑动窗口 + 频次统计 + 配对计数


✅ 题目 4:Magical Number Pairs(魔法数字配对)

题目描述

在一个数字拥有魔力的世界里,有一颗具有独特属性的魔法宝石。这颗宝石可以通过交换不超过两个数字来将一个数字神奇地转换为另一个数字。

给定一个数组 numbers,确定存在多少个不同的配对 (i, j),满足 0 ≤ i < j < numbers.length,且配对中的一个数字可以通过交换最多两个数位转换为另一个数字。

注意: 如果两个数字已经相等(不需要交换),它们仍然算作魔法配对。

示例

输入: numbers = [1, 23, 156, 1650, 651, 165, 32]
输出: 3

解释:
- 23 ↔ 32 (交换 2 个数位)
- 156 ↔ 651 (交换 1 和 6)
- 156 ↔ 165 (交换 5 和 6)

oavoservice 满分解法

def solution(numbers):
    def can_transform(a, b):
        s1, s2 = str(a), str(b)
        if len(s1) != len(s2):
            return False
        
        diffs = [(c1, c2) for c1, c2 in zip(s1, s2) if c1 != c2]
        
        # 相等或交换一对
        if len(diffs) == 0:
            return True
        if len(diffs) == 2:
            return diffs[0] == diffs[1][::-1]
        return False
    
    count = 0
    n = len(numbers)
    for i in range(n):
        for j in range(i + 1, n):
            if can_transform(numbers[i], numbers[j]):
                count += 1
    
    return count

核心考点: 字符串比较 + 差异位置分析


✅ 题目 5:Distribute and Merge Arrays(分配与合并数组)

题目描述

给定一个整数数组 numbers,使用以下规则将所有元素分配到两个数组 firstsecond

  1. numbers[0]first
  2. numbers[1]second
  3. 对于所有 i > 1,将 numbers[i] 放入严格大于 numbers[i] 的元素更多的数组中
  4. 如果平局:放入较短的数组
  5. 仍然平局?放入 first

最后,返回将 second 追加到 first 后形成的数组。

示例

输入: numbers = [5, 7, 6, 9, 2]
输出: [5, 9, 2, 7, 6]

oavoservice 满分解法

def solution(numbers):
    if len(numbers) == 0:
        return []
    if len(numbers) == 1:
        return numbers
    
    first = [numbers[0]]
    second = [numbers[1]]
    
    for i in range(2, len(numbers)):
        num = numbers[i]
        
        # 统计大于 num 的元素数量
        count_first = sum(1 for x in first if x > num)
        count_second = sum(1 for x in second if x > num)
        
        if count_first > count_second:
            first.append(num)
        elif count_second > count_first:
            second.append(num)
        elif len(first) <= len(second):
            first.append(num)
        else:
            second.append(num)
    
    return first + second

核心考点: 模拟 + 条件判断优先级


✅ 题目 6:Alternating Parity Pattern(交替奇偶模式)

题目描述

如果一个数组不包含两个连续的相同奇偶性数字(奇/奇 或 偶/偶),则认为该数组遵循交替奇偶模式。

给定一个非负整数数组 numbers,返回打破交替奇偶模式的第一个元素的索引。如果模式从未被打破,返回 -1。

示例

输入: numbers = [1, 2, 5, 3, 6]
输出: 3
解释: 5 和 3 都是奇数

输入: numbers = [1, 4, 7, 2, 5, 6]
输出: -1
解释: 模式从未被打破

oavoservice 满分解法

def solution(numbers):
    for i in range(1, len(numbers)):
        if numbers[i] % 2 == numbers[i-1] % 2:
            return i
    return -1

核心考点: 简单遍历 + 奇偶判断


💡 为什么找 oavoservice?

这套 Uber OA 题目覆盖了多种经典算法:

  1. 模拟题 - Q1, Q5 考察状态转换和条件判断
  2. 字符串处理 - Q2, Q4 考察格式化和字符比较
  3. 滑动窗口 - Q3 考察区间统计
  4. 基础遍历 - Q6 考察简单逻辑

🚀 oavoservice:你的满分通关保障

我们长期稳定承接各大科技公司如 Uber、TikTok、Google、Amazon、Microsoft、Meta 等的 OA 笔试代写服务,确保满分通过。

黑科技加持: 无视摄像头、共享屏幕、AI 监考检测

全栈覆盖: 熟悉所有主流 OA 平台

实时响应: 7x24 小时在线,随时待命

满分保障: 专业算法团队,100% 通过率

We consistently provide professional online assessment services for major tech companies like TikTok, Google, and Amazon, guaranteeing perfect scores. Feel free to contact us if you're interested.

📩 如有需求,请随时联系我们。

👉 立即添加微信:Coding0201

锁定你的 Uber 面试机会!