力扣每日一题 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 - 1
            dp = [0] * (n + 1)
            dp[1] = 1
            dp[2] = 2
            dp[3] = 3

            for 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-1
            match 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.mfbz.cn/a/716462.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人民日报:高考填志愿十问十答,填报志愿时需要考虑哪些因素?

高考结束&#xff0c;志愿填报即将开始&#xff0c;填报志愿时需要考虑哪些因素&#xff1f;如何避免高分低录甚至落榜&#xff1f;高考填志愿你需要知道的事↓↓ 祝福考生考入理想大学、就读喜欢的专业。加油&#xff01; 责任编辑&#xff1a;曹继炜

Attention机制到底是什么?

AI算法之一 的Attention机制到底是什么&#xff0c;你知道吗? 这里写目录标题 1. Attention 的本质2. Attention的3大优点3. Attention的原理3.Attention的类型3.1计算区域3.2 所用信息3.3 结构层次 4. 模型方面5. 相似度计算 1. Attention 的本质 Attention&#xff08;注意…

hive on spark 记录

环境&#xff1a; hadoop 2.7.2 spark-without-hadoop 2.4.6 hive 2.3.4 hive-site.xml <property><name>hive.execution.engine</name><value>spark</value> </property> <property><name>spark.yarn.jars</name>&l…

ETAS AUTOSAR工具链的作用

一、AUTOSAR是什么&#xff1f; AUTOSAR&#xff08;Automotive Open System Architecture&#xff09;是一个全球性的联盟&#xff0c;致力于制定和推广汽车电子系统的标准化解决方案。它是由汽车制造商、供应商和工程公司组成的合作伙伴网络&#xff0c;旨在解决汽车电子系统…

[Qt的学习日常]--常用控件2

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、widget的…

U盘文件夹变exe:现象解析与数据恢复策略

一、U盘文件夹变exe现象描述 在日常使用U盘进行数据传输和存储的过程中&#xff0c;部分用户可能会遭遇一种异常现象&#xff1a;原本正常的文件夹突然变成了可执行文件&#xff08;即后缀为.exe的文件&#xff09;。这种变化不仅影响了用户对文件的正常访问和管理&#xff0c…

基于文本和图片输入的3D数字人化身生成技术解析

随着虚拟现实、增强现实和元宇宙等技术的飞速发展,对高度逼真且具有表现力的3D数字人化身的需求日益增长。传统的3D数字人生成方法往往需要依赖大量的3D数据集,这不仅增加了数据收集和处理的成本,还限制了生成的多样性和灵活性。为了克服这些挑战,我们提出了一种基于文本提…

短剧系统搭建全攻略:功能齐全,一步到位

前言 近年来&#xff0c;短剧系统以其独特魅力&#xff0c;成为大众消遣娱乐的热门选择。简单来说&#xff0c;短剧系统就是用来看短剧的小程序&#xff0c;它汇集了丰富多彩的短剧资源&#xff0c;让观众随时随地享受观影乐趣。本文将为你详细解析短剧系统的搭建全攻略&#…

GaussDB技术解读——GaussDB架构介绍(四)

目录 11 GaussDB云原生架构 11.1 云原生关键技术架构 11.2 关键技术方案 11.2.1 通信组件 11.2.2 集群管理组件 11.2.3 多租组件 GaussDB架构介绍&#xff08;三&#xff09;从智能关键技术方案、驱动接口关键技术方案等方面对GaussDB架构进行了解读&#xff0c;本篇将…

SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解

Memcached下载和安装 是一个国内使用量还是比较大的技术 打开文件夹 我们需要在命令行窗口启动 注意要以管理员方式运行 先尝试进入指定文件 然后又再次运行 下载 memcached.exe -d install 启动 memcached.exe -d start 停止 memcached.exe -d stop memcached.exe -d i…

直播中的美颜技术详解:视频美颜SDK的开发与应用

今天&#xff0c;笔者将深入探讨直播中的美颜技术&#xff0c;解析视频美颜SDK的开发与应用。 一、视频美颜技术概述 视频美颜技术主要通过实时处理视频流&#xff0c;对人脸进行优化和修饰&#xff0c;使直播画面更加美观。这些功能不仅提升了用户的直播体验&#xff0c;还极…

程序员的悲哀是什么?

说在前面 在许多人眼中&#xff0c;程序员无疑是一份令人羡慕的职业。然而&#xff0c;这份工作背后隐藏的辛酸与挑战&#xff0c;却鲜为人知。技术的迅猛发展带来了持续的学习压力&#xff0c;孤独的编码长夜挑战着程序员的社交与情感需求。高强度的工作节奏和严苛的项目期限…

视觉应用线扫相机速度反馈(伺服转盘)

运动控制实时总线相关内容请参考运动控制专栏&#xff0c;这里不再赘述 1、运动控制常用单位u/s运动控制单位[u/s]介绍_运动控制 unit是什么单位-CSDN博客文章浏览阅读176次。运动控制很多手册上会写这样的单位&#xff0c;这里的u是英文单词unit的缩写&#xff0c;也就是单位…

10分钟部署一个个人博客

关于vuepress这里没必要过多介绍&#xff0c;感兴趣的可以直接去官网了解&#xff0c;下面是官网首页地址截图 &#xff1a;https://v2.vuepress.vuejs.org/zh/ 透过这张图&#xff0c;我们也可以大致的对这个框架的特点有一定的认识&#xff0c;这就够了。其他的东西我们在使用…

基于SSM框架的电影院售票网站

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果您对我们的电影院售票网站感兴趣或者有相关需求&#xff0c;欢迎通过文末的联系方式与我联系。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM框架 工具&#xff1a;ID…

m4s转mp3——B站缓存视频提取音频

前言 しかのこのこのここしたんたん&#xff08;鹿乃子乃子虎视眈眈&#xff09;非常之好&#xff0c;很适合当闹钟&#xff0c;于是缓存了视频&#xff0c;想提取音频为mp3 直接改后缀可乎&#xff1f;格式转换工具&#xff1f; 好久之前有记录过转MP4的&#xff1a; m4s转为…

Linux中文件查找相关命令比较

Linux中与文件定位的命令有find、locate、whereis、which&#xff0c;type。 一、find find命令最强&#xff0c;能搜索各种场景下的文件&#xff0c;需要配合相关参数&#xff0c;搜索速度慢。在文件系统中递归查找文件。 find /path/to/search -name "filename"…

数字孪生灌区信息化管理系统是如何实现水资源节水的?

在当今日益严峻的水资源形势下&#xff0c;如何实现水资源的节水利用已成为灌区管理的重中之重。幸运的是&#xff0c;随着信息化技术的快速发展&#xff0c;灌区信息化正成为推动水资源节水利用的有力工具。那么&#xff0c;数字孪生灌区信息化hua系统xit究竟如何实现水资源节…

Java环境安装

下载JDK https://www.oracle.com/cn/java/technologies/downloads/#jdk22-windows 点开那个下载都可以但是要记住下载的路径因为下一步要添加环境变量 选择编辑系统环境变量 点击环境变量 点击新建 新建环境变量JAVA_HOME 并输入JDK在计算机保存的路径 打开cmd 输入java -…

OSPF协议详解(二)

OSPF邻接关系建立流程 路由器在开启OSPF协议后先进入Down状态&#xff0c;此时路由器还未收到网络中其他路由器发送的Hello报文。 当路由器收到了其他路由器发送的Hello报文时&#xff0c;状态转发Init&#xff0c;当发来的Hello报文中有自己的Router ID时&#xff0c;状态转…