Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Cs Summary Reflection
提交
a3a51359
C
Cs Summary Reflection
项目概览
梦境迷离
/
Cs Summary Reflection
11 个月 前同步成功
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Cs Summary Reflection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a3a51359
编写于
7月 14, 2020
作者:
梦境迷离
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add scala #1339
上级
bc28aa94
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
76 addition
and
0 deletion
+76
-0
scala-leetcode/README.md
scala-leetcode/README.md
+1
-0
scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_1339.scala
...e/src/main/scala/io/github/dreamylost/Leetcode_1339.scala
+56
-0
scala-leetcode/src/main/scala/io/github/dreamylost/TreeNodeData.scala
...de/src/main/scala/io/github/dreamylost/TreeNodeData.scala
+19
-0
未找到文件。
scala-leetcode/README.md
浏览文件 @
a3a51359
...
...
@@ -64,6 +64,7 @@ Leetcode Scala 实现
*
[
先序遍历构造二叉树
](
./src/main/scala/io/github/dreamylost/Leetcode_1008.scala
)
*
[
填充每个节点的下一个右侧节点指针
](
./src/main/scala/io/github/dreamylost/Leetcode_116.scala
)
*
[
填充每个节点的下一个右侧节点指针 II
](
./src/main/scala/io/github/dreamylost/Leetcode_117.scala
)
*
[
分裂二叉树的最大乘积
](
./src/main/scala/io/github/dreamylost/Leetcode_1339.scala
)
## 链表
...
...
scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_1339.scala
0 → 100644
浏览文件 @
a3a51359
/* Licensed under Apache-2.0 @梦境迷离 */
package
io.github.dreamylost
/**
* 1339. 分裂二叉树的最大乘积
*
* 给你一棵二叉树,它的根为 root 。请你删除 1 条边,使二叉树分裂成两棵子树,且它们子树和的乘积尽可能大。
*
* 由于答案可能会很大,请你将结果对 [[10^9 + 7]] 取模后再返回
*
* @see https://github.com/jxnu-liguobin
* @author 梦境迷离 dreamylost
* @version 1.0,2020/7/14
*/
object
Leetcode_1339
extends
App
{
val
ret
=
maxProduct
(
TreeNodeData
.
treeData6_1
())
println
(
ret
)
/**
* 2592 ms,100.00%
* 71.5 MB,100.00%
*
* @param root
* @return
*/
def
maxProduct
(
root
:
TreeNode
)
:
Int
=
{
//设,以节点N与上层的边为待删除的边,乘积 = f(N上) * f(N下),分别为N上,与N下,其中N下的子树是以N为root节点的,另外一半子树比较麻烦,可以使用 sum - f(N下)
//即f(N上) = sum - f(N下)
//所以子树乘积 = sum - f(N下) × f(N下)
//其中,f(N下)比较好算,就是以当前节点为root节点的子树和,而sum更好算,就是整个树的和
//ret = max(ret, sum - f(N下) * f(N下))
if
(
root
==
null
)
return
0
var
ret
=
Long
.
MinValue
def
sum
(
r
:
TreeNode
)
:
Int
=
{
if
(
r
==
null
)
return
0
r
.
value
+
sum
(
r
.
left
)
+
sum
(
r
.
right
)
}
val
allNodeSum
=
sum
(
root
)
//必须Long
def
dfs
(
r
:
TreeNode
)
:
Long
=
{
if
(
r
==
null
)
return
0
val
cNodeSum
=
dfs
(
r
.
left
)
+
dfs
(
r
.
right
)
+
r
.
value
ret
=
math
.
max
(
ret
,
(
allNodeSum
-
cNodeSum
)
*
cNodeSum
)
cNodeSum
}
dfs
(
root
)
(
ret
%
(
1
e9
+
7
)).
toInt
}
}
scala-leetcode/src/main/scala/io/github/dreamylost/TreeNodeData.scala
浏览文件 @
a3a51359
...
...
@@ -94,6 +94,25 @@ object TreeNodeData {
n1
}
def
treeData6_1
()
:
TreeNode
=
{
val
n1
=
new
TreeNode
(
1
)
val
n2
=
new
TreeNode
(
2
)
val
n3
=
new
TreeNode
(
3
)
val
n4
=
new
TreeNode
(
4
)
val
n5
=
new
TreeNode
(
5
)
val
n6
=
new
TreeNode
(
6
)
n1
.
left
=
n2
n1
.
right
=
n3
n2
.
left
=
n4
n2
.
right
=
n5
n3
.
left
=
n6
n1
}
def
treeData11
()
:
TreeNode
=
{
val
treeNode5
=
new
TreeNode
(
5
)
val
treeNode4
=
new
TreeNode
(
4
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录