Flexport SDE I OA 笔试题目详解 | 真题合集与解题思路
2025-09-02

系统公告:本文整理了 Flexport SDE I 岗位的 Online Assessment 真题合集,包含 SQL、REST API、算法题等多种题型。涵盖经典的 Election、Counting Pairs、Increasing Array、BFS Traversal、Time Complexity 等题目。
考试概况
Flexport 作为全球领先的物流科技公司,其 SDE I 岗位的 OA 笔试题目覆盖面广,考察候选人的:
- 数据库操作能力:SQL 查询与数据分析
- API 设计理解:REST API 的使用和数据处理
- 算法思维:数据结构、算法复杂度分析
- 编程基础:代码实现和逻辑思考
题目详解
1. Election(选举统计)
题目描述:给定一个选举结果数据库,找出每个政党赢得的席位数。
核心逻辑:
- 多个选区,每个选区有多个候选人
- 每个候选人属于一个政党
- 每个选区得票最多的候选人获胜
- 按席位数降序排列输出
SQL 解法思路:
-- 1. 找出每个选区的获胜者
WITH winners AS (
SELECT constituency, candidate_id, party,
ROW_NUMBER() OVER (PARTITION BY constituency ORDER BY votes DESC) as rank
FROM election_results
)
-- 2. 统计每个政党的席位数
SELECT party, COUNT(*) as seats_won
FROM winners
WHERE rank = 1
GROUP BY party
ORDER BY seats_won DESC;
2. REST API: City Weather Station
题目描述:通过 HTTP GET 请求从数据库检索城市天气信息。
输入输出格式:
- 输入:城市名称(或 "all" 获取所有城市)
- 输出:City,Temperature,Wind,Humidity
实现思路:
def get_weather_data(city_name):
if city_name.lower() == "all":
# 返回所有城市数据
return query_all_cities()
else:
# 返回指定城市数据
return query_city_weather(city_name)
def format_response(weather_data):
result = []
for city in weather_data:
line = f"{city.name},{city.temperature},{city.wind},{city.humidity}"
result.append(line)
return "\n".join(result)
3. Counting Pairs(计数配对)
题目描述:给定整数 k 和整数列表,找出满足 a + k = b 的唯一配对数量。
关键点:
- 配对必须是唯一的(至少有一个元素不同)
- 当 k = 0 时,配对可以包含相同元素
解法:
def count_pairs(numbers, k):
from collections import Counter
count = Counter(numbers)
pairs = 0
for num in count:
target = num + k
if target in count:
if k == 0:
# 特殊情况:k=0 时计算同一数字的配对
pairs += count[num] * (count[num] - 1) // 2
else:
# 一般情况:不同数字间的配对
pairs += count[num] * count[target]
return pairs if k == 0 else pairs // 2
4. Increasing Array(递增数组)
题目描述:将数组转换为非递减数组,只能从两端删除元素。
示例分析:
数组 [4,3,3,8,4,5,2],可选方案:
- 从开头删除 4,3,3,8
- 从结尾删除 8,4,5,2
- 从开头删除 4,从结尾删除 4,5,2 ✅
解法思路:
def min_operations_to_non_decreasing(arr):
n = len(arr)
min_operations = n # 最坏情况:删除所有元素
# 尝试所有可能的左右边界组合
for left in range(n + 1): # 从左删除 left 个元素
for right in range(n - left + 1): # 从右删除 right 个元素
subarray = arr[left:n-right] if right > 0 else arr[left:]
if is_non_decreasing(subarray):
operations = left + right
min_operations = min(min_operations, operations)
return min_operations
def is_non_decreasing(arr):
return all(arr[i] <= arr[i+1] for i in range(len(arr)-1))
5. BFS Traversal(广度优先遍历)
题目描述:给定树结构:1 的子节点是 2 和 3,2 的子节点是 4 和 5。求从节点 1 开始的 BFS 遍历顺序。
答案:1 → 2 → 3 → 4 → 5
BFS 实现:
from collections import deque
def bfs_traversal(root):
if not root:
return []
result = []
queue = deque([root])
while queue:
node = queue.popleft()
result.append(node.val)
# 按顺序添加子节点
for child in node.children:
queue.append(child)
return result
6. Time Complexity Analysis(时间复杂度分析)
代码分析:
int temp = 0;
for(int i = 1; i <= n; i++) { // O(n)
for(int j = 1; j <= n; j += i) { // O(n/i) 次迭代
for(int k = 1; k <= n; k += 2) { // O(n/2) = O(n)
temp++;
}
}
}
复杂度分析:
- 外层循环:O(n)
- 中层循环:对于每个 i,执行 n/i 次
- 内层循环:每次执行 O(n)
- 总复杂度:∑(i=1 to n) (n/i) × n = n² × ∑(1/i) = n² × ln(n) = O(n² log n)
备考建议
- SQL 基础:熟练掌握 GROUP BY、ORDER BY、窗口函数
- 算法基础:数组操作、BFS/DFS、时间复杂度分析
- API 理解:REST API 设计原则和数据格式
- 编程实践:多做 LeetCode 中等难度题目
- 时间管理:OA 通常有时间限制,要提高解题速度
总结
Flexport 的 OA 笔试题目设计全面,既考察技术基础,也注重实际应用能力。通过系统准备这些题型,不仅能顺利通过 Flexport 的笔试,对其他科技公司的 OA 也有很大帮助。
我们长期稳定承接各大科技公司如 Flexport、TikTok、Google、Amazon 等的 OA 笔试辅助服务,确保高分通过。专业团队提供实时指导,帮助你在面试中脱颖而出。如有需求,请随时联系我们。