📅  最后修改于: 2023-12-03 15:40:42.357000             🧑  作者: Mango
本次沃尔玛实验室的面试是在学校内举行的。我们参加的是第 11 组面试。本次面试主要是围绕算法和数据结构展开的,题目难度适中,需要一定的算法基础和灵活运用能力。
在一个数组中找到前 k 大的元素。
import heapq
def find_top_k(arr, k):
heap = []
for i in arr:
if len(heap) < k:
heapq.heappush(heap, i)
else:
if i > heap[0]:
heapq.heappushpop(heap, i)
return heap
逆波兰表达式求值。
def evaluate_expression(tokens):
stack = []
for token in tokens:
if token in ["+", "-", "*", "/"]:
op2 = stack.pop()
op1 = stack.pop()
if token == "+":
stack.append(op1 + op2)
elif token == "-":
stack.append(op1 - op2)
elif token == "*":
stack.append(op1 * op2)
else:
stack.append(op1 // op2)
else:
stack.append(int(token))
return stack.pop()
给定一个 n * n 的网格,每个格子上有一个数字,初始状态下,一个机器人位于左上角,现在需要将其移动到右下角,每次只能向下或向右移动一格,经过的格子的数字会被计入路径和。求路径和最大是多少。
def max_path_sum(grid):
n = len(grid)
dp = [[0]*n for _ in range(n)]
dp[0][0] = grid[0][0]
for i in range(1, n):
dp[i][0] = dp[i-1][0] + grid[i][0]
dp[0][i] = dp[0][i-1] + grid[0][i]
for i in range(1, n):
for j in range(1, n):
dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j]
return dp[n-1][n-1]
设计一个支持最大值和最小值查询的栈。
class MaxMinStack:
def __init__(self):
self.stack = []
self.max_stack = []
self.min_stack = []
def push(self, x):
self.stack.append(x)
if not self.max_stack or x >= self.max_stack[-1]:
self.max_stack.append(x)
if not self.min_stack or x <= self.min_stack[-1]:
self.min_stack.append(x)
def pop(self):
x = self.stack.pop()
if self.max_stack and x == self.max_stack[-1]:
self.max_stack.pop()
if self.min_stack and x == self.min_stack[-1]:
self.min_stack.pop()
def get_max(self):
if self.max_stack:
return self.max_stack[-1]
return None
def get_min(self):
if self.min_stack:
return self.min_stack[-1]
return None
以上是本次沃尔玛实验室面试的具体内容和相关代码,希望对广大程序员们有所帮助!