897. 递增顺序搜索树-简单
题目描述:
给你一棵二叉搜索树的 root ,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
题解:
中序遍历存储节点后按顺序连接即可
代码(Go):
func increasingBST(root *TreeNode) *TreeNode {
sce := []int{}
var front func(*TreeNode)
front = func(node *TreeNode) {
if node != nil {
front(node.Left)
sce = append(sce, node.Val)
front(node.Right)
}
}
front(root)
reNode := &TreeNode{}
p := reNode
for _, val := range sce {
p.Right = &TreeNode{Val: val}
p = p.Right
}
return reNode.Right
}
LCP 17. 速算机器人-简单
题目描述:
小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作 x 和 y),请小扣说出计算指令:
“A” 运算:使 x = 2 * x + y;
“B” 运算:使 y = 2 * y + x。
在本次游戏中,店家说出的数字为 x = 1 和 y = 0,小扣说出的计算指令记作仅由大写字母 A、B 组成的字符串 s,字符串中字符的顺序表示计算顺序,请返回最终 x 与 y 的和为多少。
题解:
直接模拟
代码(Go):
func calculate(s string) int {
x := 1
y := 0
for _,v := range s{
if v == rune('A'){
x = 2 * x + y
}else{
y = 2 * y + x
}
}
return x + y
}
LCS 01. 下载插件-简单
题目描述:
小扣打算给自己的 VS code 安装使用插件,初始状态下带宽每分钟可以完成 1 个插件的下载。假定每分钟选择以下两种策略之一:
使用当前带宽下载插件
将带宽加倍(下载插件数量随之加倍)
请返回小扣完成下载 n 个插件最少需要多少分钟。
注意:实际的下载的插件数量可以超过 n 个
题解:
这个题比较容易想到,加速一定是最优的,最差的情况加速也只是和不加速用时相等,所以只需要一直加速直到可以一次下载完返回sum+1即可
代码(Go):
func leastMinutes(n int) int {
num := 1
sum := 0
for num < n{
num = num * 2
sum++
}
return sum + 1
}
105. 从前序与中序遍历序列构造二叉树-中等
题目描述:
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
题解:
递归,在中序数组中找到根节点后将数组分为两部分,并以此为根据再把前序数组划分为两部分,分别调用递归函数
代码(Go):
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder) == 0 {
return nil
}
root := &TreeNode{preorder[0], nil, nil}
i := 0
for i < len(inorder){
if inorder[i] == preorder[0] {
break
}
i++
}
root.Left = buildTree(preorder[1:len(inorder[:i])+1], inorder[:i])
root.Right = buildTree(preorder[len(inorder[:i])+1:], inorder[i+1:])
return root
}
总结
今天尝试了一下困难难度的每日一题,只能说还是有点自不量力了,时间浪费有点多,所以挑了道比较容易的中等题