【算法刷题】Day32

news2024/9/20 9:29:02

文章目录

  • 1. 单词拆分
    • 题干:
    • 算法原理:
      • 1. 状态表示:
      • 2. 状态转移方程
      • 3. 初始化
      • 4. 填表顺序
      • 5. 返回值
    • 代码:
  • 2. 环绕字符串中唯一的子字符串
    • 题干:
    • 算法原理:
      • 1. 状态表示:
      • 2. 状态转移方程
      • 3. 初始化
      • 4. 填表顺序
      • 5. 返回值
    • 代码:
  • 3. 计算布尔二叉树的值
    • 题干:
    • 算法原理:
    • 代码:
  • 4. 求根节点到叶节点数字之和
    • 题干:
    • 算法原理:
    • 代码:

1. 单词拆分

在这里插入图片描述
原题链接


题干:

字符串 s 和一个字符串列表 wordDict
利用字典中出现的一个或多个单词拼接出 s 则返回 true

字典中的单词可以重复使用


算法原理:

1. 状态表示:

dp[i] 表示: [0, i] 区间内的字符串,能否被字典中的单词拼接而成

2. 状态转移方程

在这里插入图片描述
在这里插入图片描述

3. 初始化

  1. 辅助结点⾥⾯的值要「保证后续填表是正确的」
  2. 「下标的映射关系」

dp[0] = true
s = ’ ’ + s

4. 填表顺序

从左往右

5. 返回值

dp[n]


代码:

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        //优化:将字典里面的单词存在哈希表里面
        Set<String> hash = new HashSet(wordDict);

        int n = s.length();
        boolean[] dp = new boolean[n + 1];
        dp[0] = true;
        s = " " + s;//处理下标的映射关系

        for(int i = 1; i <= n; i++) {
            for(int j = i; j >= 1; j--) {
                if(dp[j - 1] && hash.contains(s.substring(j, i + 1))) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[n];
    }
}

2. 环绕字符串中唯一的子字符串

在这里插入图片描述
原题链接


题干:

字符串 base 为一个 “abcdefghijklmnopqrstuvwxyz” 无限环绕的字符串
在这里插入图片描述

给一个字符串 s ,统计并返回 s 中有多少 不同非空子串 也在base 中出现
在这里插入图片描述


算法原理:

1. 状态表示:

dp[i] 表示:以 i 位置的元素为结尾的所有子串里面,有多少个在 base 中出现过

2. 状态转移方程

在这里插入图片描述

3. 初始化

将表里面的值都初始化为 1

4. 填表顺序

从左往右

5. 返回值

这⾥不能直接返回 dp 表里面的和,因为会有重复的结果。

在返回之前,我们需要先「去重」:

  1. 相同字符结尾的 dp 值,我们仅需保留「最大」的即可,其余 dp 值对应的子串都可以在最大的里面找到
  2. 可以创建⼀个大小为 26 的数组,统计所有字符结尾的最大 dp 值

最后返回「数组中所有元素的和」即可。


代码:

class Solution {
    public int findSubstringInWraproundString(String ss) {
        int n = ss.length();
        char[] s = ss.toCharArray();

        //1. 利用 dp 得到每一个位置为结尾的最长连续数组的长度
        int[] dp = new int[n];
        for(int i = 0; i < n; i++) {
            dp[i] = 1;
        }
        for(int i = 1; i < n; i++) {
            if(s[i - 1] + 1 == s[i] || (s[i - 1] == 'z' && s[i] == 'a')) {
                dp[i] += dp[i - 1];
            }
        }

        //2. 确定返回值
        int[] hash = new int[26];
        for(int i = 0; i < n; i++) {
            hash[s[i] - 'a'] = Math.max(hash[s[i] - 'a'], dp[i]);
        }

        //3. 返回结果
        int sum = 0;
        for(int x : hash) {
            sum += x;
        }
        return sum;
    }
}

3. 计算布尔二叉树的值

在这里插入图片描述
在这里插入图片描述
原题链接


题干:

叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True 。

非叶子节点 要么值为 2 要么值为 3 ,其中 2 表示逻辑或 OR ,3 表示逻辑与 AND 。
在这里插入图片描述


算法原理:

利用递归解决问题
在这里插入图片描述
在这里插入图片描述


代码:

class Solution {
    public boolean evaluateTree(TreeNode root) {
        if(root.left == null) {
            return root.val == 0 ? false : true;
        }
        boolean left = evaluateTree(root.left);
        boolean right = evaluateTree(root.right);
        return root.val == 2 ? left | right : left & right;
    }
}

4. 求根节点到叶节点数字之和

在这里插入图片描述
原题链接


题干:

给一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字
每条从根节点到叶节点的路径都代表一个数字

例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123
计算从根节点到叶节点生成的 所有数字之和 。


算法原理:

使用递归解决问题
在这里插入图片描述

  1. 函数头
    int dfs(TreeNode* root, int preSum)
  2. 函数体
    ① ② ③ ④
  3. 递归出口
    叶子结点

代码:

class Solution {
    public int sumNumbers(TreeNode root) {
        return dfs(root, 0);
    }

    public int dfs(TreeNode root, int preSum) {
        preSum = preSum * 10 + root.val;
        if(root.left == null && root.right == null) {
            return preSum;
        }

        int ret = 0;
        if(root.left != null) {
            ret += dfs(root.left, preSum);
        }
        if(root.right != null) {
            ret += dfs(root.right, preSum);
        }
        return ret;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1528100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

突破数据处理极限:揭秘亚信安慧AntDB

亚信安慧AntDB数据库在运营商自主可控替换项目中的成功应用&#xff0c;具有极其重要的意义。该数据库的落地&#xff0c;不仅为这一项目注入了强大的支持力量&#xff0c;还在更大程度上提升了整体的运营效能。作为一种高效可靠的数据库解决方案&#xff0c;AntDB引入了先进的…

苍穹外卖-day13:vue基础回顾+进阶

vue基础回顾进阶 课程内容 VUE 基础回顾路由 Vue-Router状态管理 vuexTypeScript 1. VUE 基础回顾 1.1 基于脚手架创建前端工程 1.1.1 环境要求 要想基于脚手架创建前端工程&#xff0c;需要具备如下环境要求&#xff1a; ​ node.js 前端项目的运行环境 学习web阶段已安…

Windows Server 各版本搭建远程访问 / VPN 服务器实现 VPN 连接(03~19)

一、Windows Server 2003 开机后点击添加或删除角色 点击下一步 勾选自定义&#xff0c;点击下一步 点击 远程访问/VPN 服务器&#xff0c;点击下一步 点击下一步 点击下一步 勾选自定义&#xff0c;点击下一步 选择配置类型&#xff0c;点击下一步 点击完成 点击是 点击完成…

Ubuntu使用Docker部署Nginx容器并结合内网穿透实现公网访问本地服务

目录 ⛳️推荐 1. 安装Docker 2. 使用Docker拉取Nginx镜像 3. 创建并启动Nginx容器 4. 本地连接测试 5. 公网远程访问本地Nginx 5.1 内网穿透工具安装 5.2 创建远程连接公网地址 5.3 使用固定公网地址远程访问 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#…

jar读取目录配置、打包jar后无法获取目录下的配置

jar读取目录配置、打包jar后无法获取目录下的配置 jar读取目录配置、打包jar后无法获取目录下的配置。java打成jar包后获取不到配置文件路径。解决项目打成jar包上线无法读取配置文件。打包jar后无法读取resource下的配置文件 场景 需要读取 src/main/resources/mapper下的所…

【Python循环4/5】跳出循环的办法

目录 导入 break 具体用法 在for循环中的运用 在while循环中的运用 continue 具体用法 区别 总结 导入 前几天的博文里&#xff0c;我们学习了for循环和while循环。 无论是for循环还是while循环&#xff0c;默认的终止条件都是边界条件。在触发边界条件之前&am…

ChatGPT4的Dalle-3 生成电影海报及升级教程

引言 首先DALL E3首先需要升级为ChatGPT4才能使用&#xff0c;接下来从以下几个方面进行介绍&#xff1a; 一、ChatGPT4中的DALL E3 的电影海报二、ChatGPT4下的DALL E3的实例三、ChatGPT4的升级教程 一、ChatGPT4中的DALL E3 的电影海报 DALLE 3可以直接在画面中识别和生成…

gPTP简介

1、gPTP&#xff08;generalized precision time protocol&#xff09;广义时钟同步协议 gPTP&#xff08;generalized precision time protocol&#xff09;广义时钟同步协议&#xff0c;即IEEE 802.1AS协议。它是IEEE 1588协议的延伸&#xff0c;可以为TSN提供全局精准…

重磅!知名三甲医院更新2024预警期刊名单!1区SCI为何上榜?

毕业推荐 SSCI&#xff08;ABS一星&#xff09; • 社科类&#xff0c;3.0-4.0&#xff0c;JCR2区&#xff0c;中科院3区 • 13天录用&#xff0c;28天见刊&#xff0c;13天检索 SCIE&#xff1a; • 计算机类&#xff0c;6.5-7.0&#xff0c;JCR1区&#xff0c;中科院2区…

C到C++的敲门砖-2

文章目录 引用内联函数auto关键字基于范围的for循环指针空值nullptr后记 引用 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。 所谓引用就是给变量起别名&am…

基于消失点的相机自标定

基于消失点的相机自标定 附赠最强自动驾驶学习资料&#xff1a;直达链接 相机是通过透视投影变换来将3D场景转换为2D图像。在射影变换中&#xff0c;平行线相交于一点称之为消失点。本文详细介绍了两种利用消失点特性的标定方法。目的是为根据实际应用和初始条件选择合适的标…

phpStudy安装thinkCMF8时,如何解决服务器rewrite和APIrewrite不支持的问题

解决步骤&#xff1a; 一&#xff1a;服务器rewrite 点击后面的问号跳转到官方文档链接&#xff1a; 复制红框内的代码 打开phpstudy&#xff0c;找到配置的站点&#xff0c;点击管理&#xff0c;找到伪静态 点击确认保存即可。 phpstudy会自动重启站点。 此时&#xff0c;…

CTF 题型 SSRF攻击例题总结

CTF 题型 SSRF攻击&例题总结 文章目录 CTF 题型 SSRF攻击&例题总结Server-side Request Forgery 服务端请求伪造SSRF的利用面1 任意文件读取 前提是知道要读取的文件名2 探测内网资源3 使用gopher协议扩展攻击面Gopher协议 &#xff08;注意是70端口&#xff09;python…

RPC学习笔记一

什么是RPC RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种用于实现分布式系统中不同计算机或进程之间进行通信和调用的技术和模式。 在传统的过程调用中&#xff0c;当一个程序需要调用另一个程序的函数或方法时&#xff0c;通常是在同一台…

【10】进阶常用第三方库

第三方库概览 名称文档一句话介绍jQuery官网:https://jquery.com/中文网:https://jquery.cuishifeng.cn/让操作 DOM 变得更容易Lodash官网:https://lodash.com/docs中文网:https://www.lodashjs.com/你能想到的工具函数它都帮你写了Animate.css官网:https://animate.style…

图算法总结

BFS: 基于队列, 入队列的顶点先被探索. DFS: 基于栈, 通过将顶点存入栈中, 顶点是沿着路径被探索的, 存在新的相邻顶点就去访问.深度优先遍历类似于树的先根遍历(先序遍历)

大模型提示学习样本量有玄机,自适应调节方法好

引言&#xff1a;探索文本分类中的个性化示例数量 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;预测模型已经从零开始训练演变为使用标记数据对预训练模型进行微调。这种微调的极端形式涉及到上下文学习&#xff08;In-Context Learning, ICL&#xff09;&…

由浅到深认识Java语言(1):前提概要

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

外贸网站常用的wordpress模板

零件配件WordPress外贸建站模板 汽车行业零配件WordPress外贸建站模板&#xff0c;卖配件、零件的外贸公司可以使用的WordPress主题。 https://www.jianzhanpress.com/?p4912 WordPress外贸独立站主题 简洁实用的WordPress外贸独立站主题&#xff0c;适合时尚服装行业搭建w…

哈尔滨华时信息公司的校企合作怎么样

在当今竞争激烈的就业市场中&#xff0c;大学生的技能培养对于他们的未来职业发展至关重要。哈尔滨华时信息技术有限公司与黑龙江农业工程职业学院信息工程院的合作&#xff0c;无疑是一次具有深远意义的举措。这样的校企合作模式不仅符合国家政策导向&#xff0c;更带来了多方…