📅  最后修改于: 2023-12-03 15:42:32.962000             🧑  作者: Mango
本篇面试经历是关于高盛(Strats Division)校内面试的经历分享。这是一场针对程序员的面试,主要考察了程序员的编程能力和算法思维等方面。
在面试中,会被要求解决一个经典的题目:二分查找。具体要求是:给定一个有序数组和一个目标值,要求找出目标值在数组中对应的下标。
# 在有序列表中二分查找目标值
def binary_search(arr, target):
# 确定左右边界
left, right = 0, len(arr) - 1
while left <= right:
# 计算中间值
mid = left + (right - left) // 2
if arr[mid] == target:
# 找到目标值
return mid
elif arr[mid] < target:
# 目标值在右边,调整左边界
left = mid + 1
else:
# 目标值在左边,调整右边界
right = mid - 1
# 没有找到目标值
return -1
运行时间: 时间复杂度:$O(logn)$ 空间复杂度:$O(1)$
编写一个程序,在给出的数组序列中,找出包含给定字符集合的最短连续子序列
def shortest_subsequence(arr, char_set):
# 定义哈希表,记录每个字符出现的个数
char_dict = {}
for c in char_set:
char_dict[c] = 0
# 记录每个位置为结束位置的最短子序列长度
dp = [0] * len(arr)
min_len = float('inf')
start, end = 0, 0
count = 0
# 遍历数组,更新哈希表和dp数组
for i in range(len(arr)):
if arr[i] in char_dict:
# 当前字符在字符集中
if char_dict[arr[i]] == 0:
count += 1
char_dict[arr[i]] += 1
if count == len(char_set):
# 找到了包含给定字符集合的子序列
while start < i and (arr[start] not in char_set or char_dict[arr[start]] > 1):
# 缩小子序列的起始位置
if arr[start] in char_set:
char_dict[arr[start]] -= 1
start += 1
# 更新最短子序列的长度及起始、结束位置
if i - start < min_len:
min_len = i - start + 1
end = i
dp[i] = min_len
if min_len == float('inf'):
return ''
else:
return arr[end - min_len + 1:end + 1]
复杂度分析:
以上就是我参加高盛(Strats Division)的校内面试的一些经历,希望能对大家有所帮助。在实际的面试中,一定要注意编程思路的清晰,代码的可读性和可维护性,同时也要保持良好的沟通能力和合作精神。