Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Cs Summary Reflection
提交
c12229bf
C
Cs Summary Reflection
项目概览
梦境迷离
/
Cs Summary Reflection
10 个月 前同步成功
通知
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,体验更适合开发者的 AI 搜索 >>
提交
c12229bf
编写于
8月 06, 2020
作者:
梦境迷离
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add rust-leetcode #1443
上级
dbdaf1a6
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
113 addition
and
0 deletion
+113
-0
rust-leetcode/README.md
rust-leetcode/README.md
+1
-0
rust-leetcode/src/leetcode_1443.rs
rust-leetcode/src/leetcode_1443.rs
+111
-0
rust-leetcode/src/main.rs
rust-leetcode/src/main.rs
+1
-0
未找到文件。
rust-leetcode/README.md
浏览文件 @
c12229bf
...
...
@@ -19,6 +19,7 @@ Leetcode Rust 实现
*
[
112 路径总和
](
src/leetcode_112.rs
)
*
[
687 最长同值路径
](
src/leetcode_687.rs
)
*
[
257 二叉树的所有路径
](
src/leetcode_257.rs
)
*
[
1443 收集树上所有苹果的最少时间
](
src/leetcode_1443.rs
)
### unsafe写法
...
...
rust-leetcode/src/leetcode_1443.rs
0 → 100644
浏览文件 @
c12229bf
use
std
::
process
::
id
;
use
crate
::
pre_structs
::
Solution
;
///1443. 收集树上所有苹果的最少时间
impl
Solution
{
//最少时间能获取全部苹果,也就是说, ret >= 2*苹果的个数
//存储子到父的所有路径,求从苹果开始到根节点的节点数量,节点*2就是路径长
//用例更新后无法通过,路径存在一对多
pub
fn
min_time_
(
n
:
i32
,
edges
:
Vec
<
Vec
<
i32
>>
,
has_apple
:
Vec
<
bool
>
)
->
i32
{
let
mut
visited
=
vec!
[
false
;
n
as
usize
];
visited
[
0
]
=
true
;
let
mut
ret
=
0
;
let
mut
reverse_edges
=
vec!
[
0
as
usize
;
n
as
usize
];
fn
dfs
(
to
:
usize
,
visited
:
&
mut
Vec
<
bool
>
,
reverse_edges
:
&
mut
Vec
<
usize
>
,
ret
:
&
mut
i32
)
{
if
!
visited
[
to
]
{
visited
[
to
]
=
true
;
*
ret
+=
1
;
dfs
(
reverse_edges
[
to
],
visited
,
reverse_edges
,
ret
);
}
}
for
edge
in
edges
.iter
()
{
//记录子 父 路径
reverse_edges
[
edge
[
1
]
as
usize
]
=
edge
[
0
as
usize
]
as
usize
;
}
//遍历所有元素,从苹果开始到根节点
for
i
in
0u
size
..
n
as
usize
{
if
i
<
has_apple
.len
()
&&
has_apple
[
i
]
{
dfs
(
i
,
&
mut
visited
,
&
mut
reverse_edges
,
&
mut
ret
);
}
}
ret
*
2
}
//28~36 ms,63.64%
//11 MB,100.00%
pub
fn
min_time
(
n
:
i32
,
edges
:
Vec
<
Vec
<
i32
>>
,
has_apple
:
Vec
<
bool
>
)
->
i32
{
let
mut
node_mappings
:
Vec
<
Vec
<
i32
>>
=
vec!
[
Vec
::
new
();
n
as
usize
];
let
mut
reverse_edges
=
vec!
[
-
1i32
;
n
as
usize
];
let
mut
visited
=
vec!
[
false
;
n
as
usize
];
visited
[
0
]
=
true
;
let
mut
ret
=
0
;
for
edge
in
edges
{
node_mappings
[
edge
[
0u
size
]
as
usize
]
.push
(
edge
[
1u
size
]);
node_mappings
[
edge
[
1u
size
]
as
usize
]
.push
(
edge
[
0u
size
]);
}
fn
build_reverse_edges
(
node_mappings
:
&
mut
Vec
<
Vec
<
i32
>>
,
val
:
usize
,
reverse_edges
:
&
mut
Vec
<
i32
>
,
)
{
let
node
=
node_mappings
[
val
]
.clone
();
for
&
pairVal
in
node
.iter
()
{
if
pairVal
!=
0
&&
reverse_edges
[
pairVal
as
usize
]
as
i32
==
-
1i32
{
reverse_edges
[
pairVal
as
usize
]
=
val
as
i32
;
build_reverse_edges
(
node_mappings
,
pairVal
as
usize
,
reverse_edges
);
}
}
}
fn
dfs
(
to
:
usize
,
visited
:
&
mut
Vec
<
bool
>
,
reverse_edges
:
&
mut
Vec
<
i32
>
,
ret
:
&
mut
i32
)
{
if
!
visited
[
to
]
{
visited
[
to
]
=
true
;
*
ret
+=
1
;
dfs
(
reverse_edges
[
to
]
as
usize
,
visited
,
reverse_edges
,
ret
);
}
}
//这一步建了一颗以0为根节点的树,确保能通过子结点找到父结点,父结点记录在reverse_edges数组中
build_reverse_edges
(
&
mut
node_mappings
,
0
,
&
mut
reverse_edges
);
//遍历所有元素,从苹果开始到根节点
for
i
in
0u
size
..
n
as
usize
{
if
i
<
has_apple
.len
()
&&
has_apple
[
i
]
{
dfs
(
i
,
&
mut
visited
,
&
mut
reverse_edges
,
&
mut
ret
);
}
}
ret
*
2
}
}
#[cfg(test)]
mod
test
{
use
crate
::
pre_structs
::
Solution
;
#[test]
fn
min_time
()
{
let
n
=
7
;
let
edges
=
vec!
[[
0
,
2
]
.to_vec
(),
[
0
,
3
]
.to_vec
(),
[
1
,
2
]
.to_vec
()];
let
has_apple
=
vec!
[
false
,
true
,
false
,
false
]
.to_vec
();
let
edges2
=
vec!
[
[
0
,
1
]
.to_vec
(),
[
0
,
2
]
.to_vec
(),
[
1
,
4
]
.to_vec
(),
[
1
,
5
]
.to_vec
(),
[
2
,
3
]
.to_vec
(),
[
2
,
6
]
.to_vec
(),
];
let
has_apple2
=
vec!
[
false
,
false
,
true
,
false
,
true
,
true
,
false
]
.to_vec
();
let
ret
=
Solution
::
min_time
(
n
,
edges
,
has_apple
);
let
ret2
=
Solution
::
min_time
(
n
,
edges2
,
has_apple2
);
println!
(
"{}"
,
ret
);
println!
(
"{}"
,
ret2
);
}
}
rust-leetcode/src/main.rs
浏览文件 @
c12229bf
...
...
@@ -48,6 +48,7 @@ pub mod leetcode_1385;
pub
mod
leetcode_14
;
pub
mod
leetcode_1403
;
pub
mod
leetcode_1413
;
pub
mod
leetcode_1443
;
pub
mod
leetcode_20
;
pub
mod
leetcode_204
;
pub
mod
leetcode_257
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录