257.二叉树的所有路径 1984.学生分数的最小差值 老大哥在看着你
This commit is contained in:
parent
828c769814
commit
6be230c7c4
|
@ -49,6 +49,7 @@ mod q0213;
|
|||
mod q0220;
|
||||
mod q0226;
|
||||
mod q0231;
|
||||
mod q0257;
|
||||
mod q0258;
|
||||
mod q0263;
|
||||
mod q0264;
|
||||
|
@ -113,4 +114,5 @@ mod q1486;
|
|||
mod q1720;
|
||||
mod q1723;
|
||||
mod q1734;
|
||||
mod q1984;
|
||||
mod q2006;
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
use crate::Solution;
|
||||
use crate::structure::TreeNode;
|
||||
use std::rc::Rc;
|
||||
use std::cell::RefCell;
|
||||
|
||||
impl Solution {
|
||||
/// [257.二叉树的所有路径](https://leetcode-cn.com/problems/binary-tree-paths/)
|
||||
///
|
||||
/// 2022-02-11 10:10:27
|
||||
///
|
||||
/// 给你一个二叉树的根节点 `root` ,按 **任意顺序** ,返回所有从根节点到叶子节点的路径。
|
||||
///
|
||||
/// > **叶子节点** 是指没有子节点的节点。
|
||||
///
|
||||
/// + **示例 1:**
|
||||
/// + ![](https://assets.leetcode.com/uploads/2021/03/12/paths-tree.jpg)
|
||||
/// + **输入:** root = \[1,2,3,null,5\]
|
||||
/// + **输出:** \["1->2->5","1->3"\]
|
||||
/// + **示例 2:**
|
||||
/// + **输入:** root = \[1\]
|
||||
/// + **输出:** \["1"\]
|
||||
/// + **提示:**
|
||||
/// * 树中节点的数目在范围 `[1, 100]` 内
|
||||
/// * `-100 <= Node.val <= 100`
|
||||
/// + Related Topics
|
||||
/// * 树
|
||||
/// * 深度优先搜索
|
||||
/// * 字符串
|
||||
/// * 回溯
|
||||
/// * 二叉树
|
||||
/// * 👍 644
|
||||
/// * 👎 0
|
||||
pub fn binary_tree_paths(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<String> {
|
||||
fn helper(root: &Option<Rc<RefCell<TreeNode>>>, mut path: Vec<i32>, ans: &mut Vec<String>) {
|
||||
match root {
|
||||
Some(node) => {
|
||||
let p = node.borrow();
|
||||
path.push(p.val);
|
||||
if p.left.is_none() && p.right.is_none() {
|
||||
ans.push(path.into_iter().map(|val| val.to_string()).collect::<Vec<String>>().join("->"));
|
||||
} else {
|
||||
if p.left.is_some() { helper(&p.left, path.clone(), ans); }
|
||||
if p.right.is_some() { helper(&p.right, path.clone(), ans); }
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
let mut ans = Vec::<String>::new();
|
||||
helper(&root, Vec::<i32>::new(), &mut ans);
|
||||
ans
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::Solution;
|
||||
use crate::structure::TreeNode;
|
||||
use std::rc::Rc;
|
||||
use std::cell::RefCell;
|
||||
|
||||
#[test]
|
||||
fn test_q0257() {
|
||||
let tree = Some(Rc::new(RefCell::new(TreeNode {
|
||||
val: 1,
|
||||
left: Some(Rc::new(RefCell::new(TreeNode {
|
||||
val: 2,
|
||||
left: None,
|
||||
right: Some(Rc::new(RefCell::new(TreeNode::new(5)))),
|
||||
}))),
|
||||
right: Some(Rc::new(RefCell::new(TreeNode::new(3)))),
|
||||
})));
|
||||
let ans = vec!["1->2->5".to_string(), "1->3".to_string()];
|
||||
assert_eq!(Solution::binary_tree_paths(tree), ans);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
use crate::Solution;
|
||||
|
||||
impl Solution {
|
||||
/// [1984.学生分数的最小差值](https://leetcode-cn.com/problems/minimum-difference-between-highest-and-lowest-of-k-scores/)
|
||||
///
|
||||
/// 2022-02-11 11:01:30
|
||||
///
|
||||
/// 给你一个 **下标从 0 开始** 的整数数组 `nums` ,其中 `nums[i]` 表示第 `i` 名学生的分数。另给你一个整数 `k` 。
|
||||
///
|
||||
/// 从数组中选出任意 `k` 名学生的分数,使这 `k` 个分数间 **最高分** 和 **最低分** 的 **差值** 达到 **最小化** 。
|
||||
///
|
||||
/// 返回可能的 **最小差值** 。
|
||||
///
|
||||
/// + **示例 1:**
|
||||
///
|
||||
/// + **输入:** nums = \[90\], k = 1
|
||||
/// + **输出:** 0
|
||||
/// + **解释:** 选出 1 名学生的分数,仅有 1 种方法:
|
||||
/// - \[_**90**_\] 最高分和最低分之间的差值是 90 - 90 = 0
|
||||
/// + 可能的最小差值是 0
|
||||
///
|
||||
/// + **示例 2:**
|
||||
///
|
||||
/// + **输入:** nums = \[9,4,1,7\], k = 2
|
||||
/// + **输出:** 2
|
||||
/// + **解释:** 选出 2 名学生的分数,有 6 种方法:
|
||||
/// - \[_**9**_,_**4**_,1,7\] 最高分和最低分之间的差值是 9 - 4 = 5
|
||||
/// - \[_**9**_,4,_**1**_,7\] 最高分和最低分之间的差值是 9 - 1 = 8
|
||||
/// - \[_**9**_,4,1,_**7**_\] 最高分和最低分之间的差值是 9 - 7 = 2
|
||||
/// - \[9,_**4**_,_**1**_,7\] 最高分和最低分之间的差值是 4 - 1 = 3
|
||||
/// - \[9,_**4**_,1,_**7**_\] 最高分和最低分之间的差值是 7 - 4 = 3
|
||||
/// - \[9,4,_**1**_,_**7**_\] 最高分和最低分之间的差值是 7 - 1 = 6
|
||||
/// + 可能的最小差值是 2
|
||||
///
|
||||
/// + **提示:**
|
||||
/// * `1 <= k <= nums.length <= 1000`
|
||||
/// * `0 <= nums[i] <= 105`
|
||||
/// + Related Topics
|
||||
/// * 数组
|
||||
/// * 排序
|
||||
/// * 滑动窗口
|
||||
/// * 👍 36
|
||||
/// * 👎 0
|
||||
pub fn minimum_difference(mut nums: Vec<i32>, k: i32) -> i32 {
|
||||
let k = k as usize;
|
||||
if k == 1 {
|
||||
return 0;
|
||||
}
|
||||
nums.sort_unstable();
|
||||
(k - 1..nums.len()).map(|idx| nums[idx] - nums[idx + 1 - k]).min().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::Solution;
|
||||
|
||||
#[test]
|
||||
fn test_q1984() {
|
||||
let nums = vec![9,4,1,7];
|
||||
let k = 2;
|
||||
assert_eq!(Solution::minimum_difference(nums, k), 2);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue