注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
社招刚做的OA, 两道题,1. 有一个仓库,然后找距离0,0最近的K个点
2. 给一个整数数组,先建立bst,不需要rebalance,给两个点,求这两个点在树中的距离。
本版看面经OA的时候,看到另外的两道题,
一道是水果题:
还有一道是golf,砍树的题目:
准备OA的时候,简单写了这两道题目的python 代码,可惜都没遇到,在这里贴出来供大家参考。
# codeList # shoppingCart
# check codelist fruit in order as ShoppingCart's order # only codeList item count <= shoppingCart's item count == 1
def isMatch(codeList, shoppingList): # sequence match need to match from the first item # edge case: shoppingList is empty
num_of_items_in_codeList, num_of_items_in_shoppingList = len(codeList), len(shoppingList) if num_of_items_in_codeList < 1: return 1 if num_of_items_in_shoppingList < 1: return 0 idx_in_codeList, idx_in_shoppingList = 0, 0 while idx_in_shoppingList < num_of_items_in_shoppingList: cur_List = codeList[idx_in_codeList] idx_in_cur_List = 0
# first match this cur_list while (cur_List[idx_in_cur_List] == 'anything') or (cur_List[idx_in_cur_List] == shoppingList[idx_in_shoppingList]): idx_in_cur_List += 1 if idx_in_cur_List == len(cur_List): idx_in_codeList += 1 print("finish matching this list {}".format(cur_List)) break idx_in_shoppingList += 1 if idx_in_shoppingList == num_of_items_in_shoppingList: break idx_in_shoppingList += 1
if idx_in_codeList == num_of_items_in_codeList: return 1 return 0
if __name__ == "__main__": codeList = [["apple", "apple"], ["orange", "banana", "orange"]] shoppingList = ["orange", "apple", "apple", "orange", "banana", "orange"] print(codeList, shoppingList, isMatch(codeList, shoppingList))
codeList2 = [["orange", "banana", "orange"], ["apple", "apple"]] visited2[cur_node.hashstr] = step
if cur_node.hashstr in visited1: step = visited1[cur_node.hashstr] + visited2[cur_node.hashstr] return step
left = Cell(cur_node.x, cur_node.y-1) right = Cell(cur_node.x, cur_node.y+1) top = Cell(cur_node.x-1, cur_node.y) down = Cell(cur_node.x+1, cur_node.y)
if isValidMove(input, left, visited2): end_path.append(left) if isValidMove(input, right, visited2): end_path.append(right) if isValidMove(input, top, visited2): end_path.append(top) if isValidMove(input, down, visited2): end_path.append(down)
# end this step step += 1 #print("ending this step") return -1
if __name__ == "__main__": test1 = [[1,1,0,1], [1,1,5,1]] print(test1, 1, minMoveGolf(test1))
test2 = [[1,3,0,2], [1,1,3,1]] print(test2, 5, minMoveGolf(test2))
test3 = [[1,0],[3,2]] print(test3, -1, minMoveGolf(test3))
test4 = [[1,1,0,12,1,1],[1,1,1,1,1,1],[0,1,0,0,0,1],[0,1,1,1,14,1],[0,0,0,0,1,1],[15,1,1,1,1,1,1]] print(test4, 14, minMoveGolf(test4))
|