力扣每日一题 6/16 字符串 + 随机一题 动态规划/数学

  • 博客主页:誓则盟约
  • 系列专栏:IT竞赛 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍ 

521.最长特殊序列 I【简单

题目:

给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列  的长度。如果不存在,则返回 -1 。

「最长特殊序列」 定义如下:该序列为 某字符串独有的最长

子序列

(即不能是其他字符串的子序列) 。

字符串 s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。

  • 例如,"abc" 是 "aebdc" 的子序列,因为删除 "aebdc" 中斜体加粗的字符可以得到 "abc" 。 "aebdc" 的子序列还包括 "aebdc" 、 "aeb" 和 "" (空字符串)。

示例 1:

输入: a = "aba", b = "cdc"
输出: 3
解释: 最长特殊序列可为 "aba" (或 "cdc"),两者均为自身的子序列且不是对方的子序列。

示例 2:

输入:a = "aaa", b = "bbb"
输出:3
解释: 最长特殊序列是 "aaa" 和 "bbb" 。

示例 3:

输入:a = "aaa", b = "aaa"
输出:-1
解释: 字符串 a 的每个子序列也是字符串 b 的每个子序列。同样,字符串 b 的每个子序列也是字符串 a 的子序列。

提示:

  • 1 <= a.length, b.length <= 100
  • a 和 b 由小写英文字母组成

分析问题:

        这道题很有意思哈,没有自己的主见真的会被题目给带偏,很容易去想如何切割或者如何比较能得到最大长度,但是其实这些都不需要,只需要对比 a是否等于b 即可。

        如果a不等于b的话,直接可以返回a,b的最大长度,可以这样想:如果a!=b, 那取a的全部或者b的全部肯定都不可能是另一方的子序列。

        如果 a等于b ,那可以直接返回 -1。

代码实现:

class Solution:def findLUSlength(self, a: str, b: str) -> int:return max(len(a), len(b)) if a != b else -1


 总结:

        其实这道题就像是一个脑筋急转弯哈,没啥可讲的,就看能不能转过来这个圈了。


 

随机一题:343.整数拆分【中等

题目:

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

提示:

  • 2 <= n <= 58

 题目分析:

        这道题其实就是在考数学和动态规划了,但是其实我认为这道题数学是一种做法,动态规划是另一种做法,他们两个并不是一体的。所以这道题我提供了两种解法思路。

动态规划:

  • 首先定义一个内部函数 integer_break 来处理具体的计算逻辑。
  • 对于小于等于 3 的整数 n,直接返回 n - 1,因为对于 n = 2,拆分为 1 + 1,乘积为 1,而直接返回 1 ;对于 n = 3,拆分为 1 + 2,乘积为 2,而直接返回 2 。
  • 然后创建一个长度为 n + 1 的 dp 数组,用于保存中间计算的结果。
  • 初始化 dp[1] = 1dp[2] = 2dp[3] = 3
  • 从 4 开始到 n 进行遍历,对于每个 i,通过内层循环枚举所有可能的拆分方式。内层循环中,j 从 1 到 i // 2 + 1,表示将 i 拆分为 j 和 i - j 两部分,然后更新 dp[i] 为当前最大值,即之前计算的 dp[j] * dp[i - j] 与当前 dp[i] 的最大值。
  • 最终返回 dp 数组的最后一个元素,即 dp[-1],就是 n 的最大乘积拆分结果。

代码实现:

class Solution:def integerBreak(self, n: int) -> int:def integer_break(n):if n <= 3:return n - 1dp = [0] * (n + 1)dp[1] = 1dp[2] = 2dp[3] = 3for i in range(4, n + 1):for j in range(1, i // 2 + 1):dp[i] = max(dp[i], dp[j] * dp[i - j])return dp[-1]return integer_break(n)

 


数学思维:

 

  • 首先定义了一个内部函数 calc 来处理具体的计算。
  • 对于小于 4 的整数 n,直接返回 n - 1。这是因为 2 拆分后最大乘积为 1(即 1 + 1),3 拆分后最大乘积为 2(即 1 + 2)。
  • 对于大于等于 4 的整数 n,根据 n 除以 3 的余数进行不同的处理。
    • 如果 n 除以 3 余数为 0,那么结果就是 3 的 n // 3 次方。这是因为 3 是拆分后能得到较大乘积的基本单元。
    • 如果余数为 1,结果是 4 乘以 3 的 (n // 3 - 1) 次方。这是因为把一个 3 换成 2 和 2 组成 4 能得到更大的乘积。
    • 如果余数为 2,结果是 2 乘以 3 的 n // 3 次方。

代码实现:

class Solution:def integerBreak(self, n: int) -> int:def calc(n):if n<4: return n-1match n%3 :case 0: return 3**(n//3)case 1: return 4*3**(n//3-1)case 2: return 2*3**(n//3)return (calc(n))


总结:

        这两段代码都是解决整数 n 拆分以获取最大乘积的问题,但其思路各有千秋。

考察的内容

  • 动态规划的思想,通过保存中间计算结果来逐步得出最终解。
  • 对整数运算和余数的运用,根据不同的余数情况进行特定的处理。

学到的内容

  • 对于类似求最优解的问题,可以考虑使用动态规划来降低计算复杂度。
  • 巧妙运用数学规律,如在这段代码中对 3 的组合以及根据余数的特殊处理,能够优化计算。

反思

  • 在解决问题时,要善于分析问题的特点,寻找规律,选择最合适的数据结构和算法。
  • 对于整数运算和数学特性的深入理解,能够帮助我们设计更高效的算法。
  • 不同的解法可能有不同的效率和适用场景,需要根据具体情况进行选择和优化。 例如,第一段代码使用动态规划,适用于较大规模的计算,但可能在空间复杂度上有一定开销;第二段代码利用数学规律,计算较为简洁,但可能对于问题的普适性需要进一步思考。

 “戒除欲望,控制行为,充实生活,美好的世界。”——《yuanziyu》

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

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

相关文章

【猫狗分类】Pytorch VGG16 实现猫狗分类4-开始训练

背景 现在&#xff0c;我们已经完成了&#xff0c;数据集的清洗&#xff0c;标签的制作&#xff0c;也把VGG16的模型建立好了。那接下来&#xff0c;我们应该把数据&#xff0c;放到我们搭建的vgg16的模型里面&#xff0c;让模型针对这些猫和狗的图片&#xff0c;去进行训练&a…

面试题 17.17. 多次搜索

链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; class Solution { private:struct Trie {Trie() {end false;index -1;next.resize(26);}bool end;int index;std::vector<std::unique_ptr<Trie>> next;};void insert_trie(int in…

5.3.2_1 线索二叉树的概念

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

接口和抽象类:如何使用普通类模拟接口和抽象类

目录 1.引言 2.抽象类和接口的定义与区别 3.抽象类和接口存在的意义 4.模拟实现抽象类和接口 5.抽象类和接口的应用场景 1.引言 在面向对象编程中&#xff0c;抽象类和接口是两个经常被提及的语法概念&#xff0c;也是面向对象编程的四大特性&#xff0c;以及很多设计模式…

借报告Team ID错误谈谈Mac app文件签名与公证

文章目录 目的起因流程熟悉本地证书、认证证书申请在钥匙串中创建要公证app的profile(公证的时候会用到)程序打包后App文件进行app签名压缩打包公证公证变化在WWDC19, 苹果在MacOS 10.14之后引入了公证(Notarization)这一机制来提升安全性. 主要分以下几步新的公证workflow公…

使用KVM制作镜像

资源列表 操作系统 IP Centos7&#xff0c;桌面版 192.168.10.57 安装KVM 安装软件包 yum -y install qemu-kvm qemu-kvm-tools qemu-img bridge-utils libvirt virt-install virt-manager 检查有否支持虚拟化 grep -e vmx -e svm /proc/cpuinfo #VMX是英特尔版本&…

【CT】LeetCode手撕—88. 合并两个有序数组

目录 题目1- 思路2- 实现⭐88. 合并两个有序数组——题解思路 2- ACM实现 题目 原题连接&#xff1a;88. 合并两个有序数组 1- 思路 模式识别 模式1&#xff1a;两个有序数组合并 ——> 双指针模式2&#xff1a;返回结果填充到 nums1[mn] ——> 需要开辟新的数组空间 …

lxml库在爬虫领域的贡献及应用

重头戏lxml库里面的xpath 一段代码给各位开开胃 这段代码首先导入了lxml库中的etree模块&#xff0c;然后定义了一个包含HTML内容的字符串html。接着&#xff0c;我们使用etree.HTML()函数解析这个HTML字符串&#xff0c;得到一个表示整个HTML文档的树形结构。最后&#xff0c;…

C# 字段 属性 索引器

字段声明字段字段初始化静态字段常量字段只读字段字段的访问然而 属性声明属性自动实现的属性只读属性只写属性属性的逻辑处理属性的访问修饰符属性和字段的区别属性的用途总结 索引器索引器的基本语法使用索引器索引器的关键点语法参数访问和设置异常处理性能重载使用场景封装…

qt 实现模拟实际物体带速度的移动(水平、垂直、斜角度)——————附带完整代码

文章目录 0 效果1 原理1.1 图片旋转1.2 物体带速度移动 2 完整实现2.1 将车辆按钮封装为一个类&#xff1a;2.2 调用方法 3 完整代码参考 0 效果 实现后的效果如下 可以显示属性&#xff08;继承自QToolButton&#xff09;: 鼠标悬浮显示文字 按钮显示文字 1 原理 类继承…

Folx软件安装教程及最新版下载

简介&#xff1a; Folx Pro是一款适合Mac的专业下载工具也是一款BT下载器&#xff0c;Folx中文版有一个支持Retina显示的现代界面&#xff0c;提供独特的系统排序、存储下载内容与预览下载文件。Folx中文官网提供Folx教程、激活码、下载。 安 装 包 获 取 地 址&#xff1a; …

远程连接管理服务SHH

1.了解服务端和客户端 服务端&#xff1a;提供服务 客户端&#xff1a;享受服务 思考: 我们通过网络是如何找到我们想要访问的服务的? IP(提供服务的服务器)Port(找到相应的服务) 2.了解端口号的设定 说明:端口号只有整数&#xff0c;范围是从0 到65535 1&#xff5e;2…

使用RANSAC来拟合直线

RANSAC是“RANdom SAmple Consensus”的缩写&#xff0c;是一种迭代方法&#xff0c;用于数据中估计统计参数或几何模型的算法。它通过给定数据集中随机选择样本并使用样本计算模型&#xff0c;然后测试模型的可能性来工作。如果一个模型通过了足够数量的测试&#xff0c;则认为…

warning LNK4017: DESCRIPTION 语句不支持目标平台;已忽略

文章目录 warning LNK4017: DESCRIPTION 语句不支持目标平台&#xff1b;已忽略概述笔记备注END warning LNK4017: DESCRIPTION 语句不支持目标平台&#xff1b;已忽略 概述 基于ATL的COM DLL导出函数&#xff0c;无法用__declspec(dllexport)直接在函数上标记为导出函数。 只…

【Python】torch_scatter安装报错

torch_cluster&#xff0c;torch_scatter&#xff0c;torch_sparse则在成功安装torch后&#xff0c;使用指令 pip install --no-index torch_scatter -f https://pytorch-geometric.com/whl/torch-1.x.0cu10x.html&#xff08;torch_cluster可直接修改为另外两样&#xff09;进…

Scala网络编程:代理设置与Curl库应用实例

在网络编程的世界里&#xff0c;Scala以其强大的并发模型和函数式编程特性&#xff0c;成为了开发者的得力助手。然而&#xff0c;网络请求往往需要通过代理服务器进行&#xff0c;以满足企业安全策略或访问控制的需求。本文将深入探讨如何在Scala中使用Curl库进行网络编程&…

MySQL第三方图形化工具:DBeaver

操纵数据库的语言&#xff0c;基于功能划分为4类&#xff1a; 数据定义:DDL(Data Definition Language)库的创建删除、表的创建删除等 数据操纵:DML(Data ManipulationLanguage)新增数据、删除数据、修改数据等 数据控制:DCL(Data ControlLanguage)新增用户、删除用户、密码…

DAY24 回溯算法part01 77. 组合 216.组合总和III 17.电话号码的字母组合

理论基础 #什么是回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 在二叉树系列中&#xff0c;我们已经不止一次&#xff0c;提到了回溯&#xff0c;例如二叉树&#xff1a;以为使用了递归&#xff0c;其实还隐藏着回溯 (opens new window)。 回溯是递…

【靶场搭建】-02- 搭建OWASP靶机

1.OWASP靶机介绍 相比较其他靶机&#xff0c;OWASP提供的环境更多&#xff0c;且包含了许多其他靶机的环境&#xff0c;属于性价比比较高的靶机了。 2.下载OWASP 访问以下地址进行下载&#xff1a; https://sourceforge.net/projects/owaspbwa/ 因为OWASP是虚拟机文件&…

玩具机器人脚本适合场景

玩具机器人脚本作为一个模拟的玩具机器人脚本&#xff0c;适合以下场合&#xff1a; 1.教育和学习&#xff1a;对于初学者和编程爱好者来说&#xff0c;这个脚本是一个很好的学习工具&#xff0c;可以帮助他们理解如何编写和执行简单的控制逻辑。 2.在计算机科学、机器人技术或…