我投的是机器学习算法工程师岗位,不同岗位的题目貌似不一样
以下思路仅仅是我的个人解法,不保证正确,存在问题欢迎指正。
1. 计算准确率、召回率
直接根据准确率、召回率的定义进行计算即可
2. 最短路问题
经典的单源最短路问题,直接用狄克斯拉特算法求解
参考代码:
import heapq def dijkstra(cost, start=0, end=25): heap = [(0, start)] visited = set() while heap: (cost, u) = heapq.heappop(heap) if u in visited: continue visited.add(u) if u == end: return cost for v in range(26): if v in visited: continue c = cost[u][v] next = cost + c heapq.heappush(heap, (next, v)) return -1
3. 疑似双指针,但是出题人说的不是人话
读了好几遍题没读懂,主要是题目描述和示例不一致。最后写了一个双指针的方法去判断最长递增子序列。
参考代码:
def exist_k(arr, k): m = 1 res = 1 n = len(arr) for r in range(1, n): if arr[r] >= arr[r - 1]: m += 1 res = max(res, m) else: m = 1 return res >= k
4. 题目依然晦涩难懂
两次排序,第一次直接排序去计算中位数,第二次排序是按照题目中提到的买卖点判断方式进行排序,然后取前k个值
参考代码:
from functools import cmp_to_key def max_possible_k(arr, k): n = len(arr) sorted_arr = sorted(arr) m = sorted_arr[(n - 1) // 2] def cmp(x, y): if abs(x - m) > abs(y - m): return -1 elif abs(x - m) == abs(y - m) and x > y: return -1 else: return 1 new_arr = sorted(arr, key=cmp_to_key(cmp)) return new_arr[:k]
全部评论
(5) 回帖