问题1
问题描述:讲二叉树的n个节点用[1,n]内的整数进行编号,给定先序、后序遍历,输出中序遍历
吐槽:showmebug这个代码环境、调试的我想吐,编辑器常常卡死,所以后来就赶紧提交做360去了,自己本地测试用例没问题,我甚至跳入到下一题都卡死五分钟。。。可能做的人太多了
思路:前序是:根左右 中序是:左根右 后序是:左右根
给定先、后,可以先确定根节点pre[0],左孩子就是pre[1],右孩子肯定是post[-2]
依次递归喽
代码
def solve(preorder, postorder, ans):
if len(preorder) == 1:
ans.append(preorder[0])
return
root = preorder[0]
left_root = preorder[1]
right_root = postorder[-2]
for i, x in enumerate(preorder):
if x == right_root:
break
for j, x in enumerate(postorder):
if x == left_root:
break
solve(preorder[1: i], postorder[: j + 1], ans)
ans.append(root)
solve(preorder[i:], postorder[j + 1: -1], ans)
def solution(preorder: list, postorder: list)-> list:
ans = []
solve(preorder, postorder, ans)
return ans
问题2
问题描述:已知sigmoid之前的输入向量x和对应的标签y,请你求出Loss对输入向量x的梯度【蒙蔽了,没做】
问题3
问题描述:IOU计算 输入两个矩形,计算IOU IOU,四舍五入保留4位小数
这个是核心代码模式:简单计算就可以了,但是吧,这个网站我不会测试,还卡死,就算了吧
def cal_merge(l1, r1, l2, r2):
return max(0, min(r1, r2) - max(l1, l2))
def solution(cx1:float, cy1:float, w1: float, h1:float, cx2:float, cy2:float, w2:float, h2:float)->float:
w1 = w1 / 2
h1 = h1 / 2
w2 = w2 / 2
h2 = h2 / 2
w = cal_merge(cx1 - w1, cx1 + w1, cx2 - w2, cx2 + w2)
h = cal_merge(cy1 - h1, cy1 + h1, cy2 - h2, cy2 + h2)
result = w * h
return round(result, 0)