当前位置: 首页 > news >正文

[lc-rs] 树|建桥贪心

 

 

lc200

DFS遍历网格:遇到'1'就标记为'2'并递归探索上下左右相邻格子,统计独立'1'区域数量即岛屿数

impl Solution {
    pub fn num_islands(mut grid: Vec<Vec<char>>) -> i32 {
        fn dfs(grid: &mut Vec<Vec<char>>, i: usize, j: usize) {
            // 出界,或者不是 '1',就不再往下递归
            if i >= grid.len() || j >= grid[i].len() || grid[i][j] != '1' {
                return;
            }
            grid[i][j] = '2'; // 插旗!避免来回横跳无限递归
            dfs(grid, i, j - 1); // 往左走
            dfs(grid, i, j + 1); // 往右走
            dfs(grid, i - 1, j); // 往上走
            dfs(grid, i + 1, j); // 往下走
        }

        let mut ans = 0;
        for i in 0..grid.len() {
            for j in 0..grid[i].len() {
                if grid[i][j] == '1' { // 找到了一个新的岛
                    dfs(&mut grid, i, j); // 把这个岛插满旗子,这样后面遍历到的 '1' 一定是新的岛
                    ans += 1;
                }
            }
        }
        ans
    }
}

 

lc45

贪心算法找最少跳跃次数:

遍历中记录当前能到的最右点,到边界时更新边界并计数,直到覆盖终点

impl Solution {
    pub fn jump(nums: Vec<i32>) -> i32 {
        let mut ans = 0;
        let mut cur_right = 0; // 已建造的桥的右端点
        let mut next_right = 0; // 下一座桥的右端点的最大值
        for i in 0..nums.len()-1 {
            // 遍历的过程中,记录下一座桥的最远点
            next_right = next_right.max(i as i32 + nums[i]);
            if i as i32 == cur_right { // 无路可走,必须建桥
                cur_right = next_right; // 建桥后,最远可以到达 next_right
                ans += 1;
            }
        }
        ans
    }
}

 

 

lc226

use std::rc::Rc;
use std::cell::RefCell;

impl Solution {
    pub fn invert_tree(root: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc<RefCell<TreeNode>>> {
        if let Some(node) = root {
            let left = Self::invert_tree(node.borrow_mut().left.take()); // 翻转左子树
            let right = Self::invert_tree(node.borrow_mut().right.take()); // 翻转右子树
            node.borrow_mut().left = right; // 交换左右儿子
            node.borrow_mut().right = left;
            Some(node)
        } else {
            None
        }
    }
}
 

http://www.dtcms.com/a/519541.html

相关文章:

  • 状压DP:从入门到精通
  • Open-webui
  • AIDD - 前沿生物科技 自主决策实验 (Autonomous Experimentation) 的简述
  • 网络管理员教程(初级)第六版--第5章网络安全及管理
  • 怎么创建自己的公司网站开发公司总工程师职责
  • AI问答:rust自定义Drop如何手动释放内存?
  • JetPack 6.0 / Ubuntu 22.04 (L4T 36.x )一键彻底关闭自动更新脚本
  • 【展厅多媒体】展厅小知识:VR体感游戏推动展厅数字化转型
  • MySQL部署
  • ubuntu中为什么查看CPU的步进?查看命令是什么?
  • 【2025】libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent
  • 广告设计网站免费樟树市建设局网站
  • Redis Jedis 快速入门
  • 未来之窗昭和仙君(三十一)全球化多国语言——东方仙盟筑基期
  • 面试常问笔记整理
  • 如何提高技能和知识
  • 小白python入门 - 6. Python 分支结构——逻辑决策的核心机制
  • 证件阅读器在酒店案例
  • 免费做app的网站有哪些物流公司网站怎么做
  • 公司网站制作商濮阳到上海
  • 网络编程-初识
  • 十六、OpenCV中的图像文件处理
  • 你的图表太安静了!3行代码让Highcharts“开口说话“
  • 网站地图制作工具抽卡 wordpress
  • digiCamControl,一款专业级 DSLR 远程控制工具
  • 成功解决NVIDIA Jetson docker环境下Opencv+Gstreamer 无法对rtsp相机拉流问题
  • 2025年保姆级C++环境配置教程(Windows/macOS双平台)
  • Linux内核中RDMA资源的精细化管理:cgroup子系统实现解析
  • Rust 性能优化指南:内存管理、并发调优与基准测试案例
  • 手机免费注册网站网站的根目录怎么找