首页 > 其他分享 >2024届计算机秋招100天备战:力扣每日打卡挑战全记录 & 面试题总结

2024届计算机秋招100天备战:力扣每日打卡挑战全记录 & 面试题总结

时间:2023-04-02 20:23:01浏览次数:54  
标签:得分 面试题 多边形 剖分 全记录 values 打卡 节点 dp

最近两个月力扣困难题不再落下,打卡全满勤,激发了持续刷题的斗志。这里将持续记录打卡过程中的难题和面试八股。

2023/4/2 1039. 多边形三角剖分的最低得分

题目大意:
多边形每个节点有一个数值,将多边形三角剖分,得分为所有三角形节点乘积之和。求三角剖分后的最低得分。

做题评价:
虽然中等题,但没能第一时间做出来。需要熟练掌握动态规划,避免先入为主而被错误方法引导。

解题过程:
1)三角剖分有一个经典的计数问题,即求凸多边形的三角剖分方案数。该问题很容易通过固定两个端点(如0和n-1),枚举中间节点k,将问题转化为两个多边形(区间0-k)和(区间k-n-1)的子问题。这个问题的解是卡特兰数。
2)先入为主陷入了错误的想法:由于上面问题结果的规模是指数增长,我以为无法通过动态规划求解出每一种方案来找到全局最小值,于是不断尝试用贪心法:

  1. 重复选择值最小的两个节点:需要节点不相邻,这个改对甚至通过了92 / 94 个测试用例。
  2. 重复选择值相乘最小的两个节点
  3. 交了三次,分别得到一些例外情况 [3-6-1-2] 和 [2-3-7-3]

3)重新思考子问题,即如何表示一个多边形的最低得分。

  1. 用dp[i][j] 表示 i~j 这些节点围成的多边形的最优解
  2. 初始化 dp[i][i+1] = 0 (两个节点)
    dp[i][i+2] = v[i]*v[i+1]*v[i+2] (三个节点)
  3. 由边数从小到大遍历3<=l<n,计算 dp[i][i+l],j = i+l
    对每个 dp[i][j] 枚举中间节点 i<k<j,稍加推导,易得
    dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j] + values[i]*values[k]*values[j])
  4. 返回答案 dp[0][n-1]

ChatGPT对以上记录的评价

您的博客记录已经很不错了,总体上清晰地概括了这道题目的背景和解题思路,并且提到了自己在解题过程中遇到的问题和困惑,这对读者来说非常有帮助。
以下是一些可以改进的地方:
对题目的描述可以更加详细和准确。例如,可以提到多边形是凸多边形,每个节点的数值都是正整数等等。这样有助于读者更好地理解题目。
在解题过程中,建议更加详细地讲解每一步的推导过程和原因,这样读者可以更清晰地理解算法的实现。
最后,可以在博客记录中提供代码实现,以方便读者查看和参考。同时,可以加入一些具体的实例来说明算法的使用和效果,这样读者可以更好地理解和掌握算法。
希望以上建议可以帮助到您,祝您写作愉快!

ChatGPT润色修改版

题目描述:
给定一个凸多边形,每个节点有一个正整数数值。将多边形进行三角剖分,并计算所有三角形上节点数值的乘积之和。求剖分后的最低得分。

解题过程:
问题分析

  • 首先,我们需要明确问题的规模,即输入数据的范围和结果的规模,以便选择合适的算法。
    在这道题目中,多边形的节点数范围是 [3,50],每个节点的数值是正整数,结果的规模取决于多边形的三角剖分方案数,理论上可能会非常大,但是我们只需要求得最低得分,因此不必考虑具体的结果数值。
  • 其次,我们需要考虑如何表示问题的子问题,即如何表示一个多边形的最低得分。
    我们可以定义一个二维数组 dp,其中 dp[i][j] 表示从节点 i 到节点 j 形成的多边形的最低得分。则所求答案即为 dp[0][n-1]。

动态规划解法
接下来,我们考虑如何利用动态规划求解问题。

  • 首先,对于一个只有两个节点的多边形,它的最低得分显然为 0,因为它没有三角形可以构成。因此,我们可以初始化 dp[i][i+1] = 0。

  • 接下来,我们考虑多边形节点数大于 2 的情况。我们可以按照多边形边数递增的顺序进行遍历,对于每个边数,我们枚举这个多边形中所有可能的三角剖分方案,并找到最低得分。

  • 具体地,我们枚举中间节点 k,将多边形分成两个子多边形 [i,k] 和 [k,j],计算它们的最低得分,再加上它们之间的三角形的得分 values[i]*values[k]*values[j],即可得到总得分。
    我们可以用以下公式表示:
    dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + values[i]*values[k]*values[j]) 其中,i<k<j。

  • 最后,我们返回 dp[0][n-1] 作为答案。

代码实现

def minScoreTriangulation(values):
    n = len(values)
    dp = [[0] * n for _ in range(n)]
    
    for d in range(2, n):
        for i in range(n - d):
            j = i + d
            dp[i][j] = float('inf')
            for k in range(i + 1, j):
                dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + values[i]*values[k]*values[j])
    
    return dp[0][n-1]

其中,values 是一个长度为 n 的数组,表示多边形每个节点的数值。函数返回值为三角剖分后的最低得分。
该算法的时间复杂度为 O(n^3),空间复杂度为 O(n^2)。
需要注意的是,该算法使用了动态规划,需要了解动态规划的基本概念和思想。同时,该算法也需要您了解多边形的三角剖分以及节点乘积之和的概念。


(长期更新)

标签:得分,面试题,多边形,剖分,全记录,values,打卡,节点,dp
From: https://www.cnblogs.com/izcat/p/17277143.html

相关文章

  • 力扣---面试题13. 机器人的运动范围
    地上有一个m行n列的方格,从坐标[0,0]到坐标[m-1,n-1]。一个机器人从坐标[0,0]的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格[35,37],因为3+5+3+7=18。但它不能进入......
  • 面试题汇总(NO.1)
    3.31 day1#1.深浅拷贝是什么>-1.深浅拷贝是对数据进行复制不可变类型:深浅拷贝都是一样的重新拷贝一份数据可变类型:如果内部嵌套的还有不可变类型,-浅拷贝只拷贝第一层,嵌套拷贝的是内存地址,-......
  • 4.2面试题
    面试题4.2面试题1数据库三大范式是什么2mysql有哪些索引类型,分别有什么作用3事务的特性和隔离级别第一遍自我理解回答数据库的三大范式:数据库的范式:关系型数据库中,数据表设计的基本原则、规则称为范式1NF:数据库最基本原则------->>!!!属性不可分割2NF:满足第一范式,且不......
  • Elasticsearch 学习-面试题目
    Elasticsearch学习-面试题目第7章Elasticsearch面试题7.1为什么要使用Elasticsearch?系统中的数据,随着业务的发展,时间的推移,将会非常多,而业务中往往采用模糊查询进行数据的搜索,而模糊查询会导致查询引擎放弃索引,导致系统查询数据时都是全表扫描,在百万级别的数据库中,查......
  • Redis面试题
    NoSQL是什么?NoSQL(NotOnlySQL的缩写)泛指非关系型的数据库,主要针对的是键值、文档以及图形类型数据存储。并且,NoSQL数据库天生支持分布式,数据冗余和数据分片等特性,旨在提供可扩展的高可用高性能数据存储解决方案。一个常见的误解是NoSQL数据库或非关系型数据库不能很好地存......
  • 面试题45(Java)-把数组排成最小的数(中等)
    题目:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例1:输入:[10,2]输出:"102"示例 2:输入:[3,30,34,5,9]输出:"3033459"提示:0<nums.length<=100说明:输出结果可能非常大,所以你需要返回一个字符串而不......
  • Java IO面试题
    JavaIO概览JavaIO流的40多个类都是从如下4个抽象类基类中派生出来的。InputStream/Reader:所有的输入流的基类,前者是字节输入流,后者是字符输入流。OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流。InputStream字节输入流InputStream用于......
  • 这可能是最全面的Spring面试题总结了
    Spring是什么?Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring的优点通过控制反转和依赖注入实现松耦合。支持面向切面的编程,并且把应用业务逻辑和系统服务分开。通过切面和模板减少样板式代码。声明式事务的支持。可以从单调繁冗的事务管理代码中解脱......
  • sql面试题目
    sql逻辑:createtableods.product(product_idint,product_namevarchar(255))ENGINE=InnoDBDEFAULTCHARSET=utf8mb3;insertintoods.productvalues(1,'LCPhone');insertintoods.productvalues(2,'LCT-Shirt');select*fromods.product;cre......
  • 别逛了,送你一份2023年Java核心篇JVM(虚拟机)面试题整理
    Java内存区域说一下JVM的主要组成部分及其作用?JVM包含两个子系统和两个组件,两个子系统为Classloader(类装载)、Executionengine(执行引擎);两个组件为Runtimedataarea(运行时数据区)、NativeInterface(本地接口)。●Classloader(类装载):根据给定的全限定名类名(如:java.......