• 动态规划无效总结--回文子串,最大子数和


    给你一个字符串 s,找到 s 中最长的回文子串。

    示例 1:

    输入:s = "babad"
    输出:"bab"
    解释:"aba" 同样是符合题意的答案。
    示例 2:

    输入:s = "cbbd"
    输出:"bb"
     

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/longest-palindromic-substring
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    回文子串的题目很好理解,通过暴力也能做,大致情况就是用双指针,从头到尾遍历整个字符串,当字符串与反转之后的字符串相等的时候就直接输出,并且通过长度进行约束。大概代码为。

    1. calss solution:
    2. def rewrord(self, s):
    3. n = len(s)
    4. s_len = 1
    5. for i in range(n-1):
    6. for j in range(i+1,n):
    7. if s[i:j] = s[i:j][::-1] and j - i + 1 < s_len:
    8. res = s[i:j]
    9. s_len = j - i + 1
    10. return res

    也就是暴力选择,找到一个子串就翻转判断是否相同,随后。

    随后,用动态规划就很好!

    主要弄一个二维数组,其中,i是左边界,j是右边界,如果dp[i][j]是True,相当于i到j 是回文。

    1. def reword(self,s):
    2. n = len(s)
    3. s_len = 1 # 此处单个数也是回文的
    4. dp = [[False] * n for _ in range(n)]
    5. for i in range(n):
    6. dp[i][i] = True
    7. for L in range(0,n):
    8. for i in range(n):
    9. j = L + i
    10. if j > n:
    11. break
    12. if s[i] != s[j]:
    13. continue
    14. else:
    15. if j -i < 3:
    16. dp[i][j] = True
    17. else:
    18. dp[i][j] = dp[i+1][j-1]
    19. if dp[i][j] and j - i + 1 >= s_len:
    20. star = i
    21. s_len = j - i + 1
    22. return s[star:star+s_len]

    动态规划好就好在能通过状态函数改变自己的进程。

    最大子数和

    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    子数组 是数组中的一个连续部分。

    示例 1:

    输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
    输出:6
    解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
    示例 2:

    输入:nums = [1]
    输出:1
    示例 3:

    输入:nums = [5,4,-1,7,8]
    输出:23

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/maximum-subarray
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    1. class Solution:
    2. def maxSubArray(self, nums: List[int]) -> int:
    3. size = len(nums)
    4. if size == 0:
    5. return 0
    6. dp = [0 for _ in range(size)]
    7. dp[0] = nums[0]
    8. for i in range(1, size):
    9. if dp[i - 1] >= 0:
    10. dp[i] = dp[i - 1] + nums[i]
    11. else:
    12. dp[i] = nums[i]
    13. return max(dp)

    思路在于如何利用这个动态规划方案,选出的最大子数和,当然在调整的时候需要考虑到当前的数是否是最大的数这一个问题,如果当前的数是正数,将前一个与数组中的数与当前的数相加,不断迭代得到结果。

  • 相关阅读:
    chat-gpt笔记:参数temperature与top_p
    springboot项目中定时任务注解@Scheduled未按cron表达式执行
    【蓝桥杯Web】第十三届蓝桥杯(Web 应用开发)第一次线上模拟赛
    STM8S TIM1寄存器 PWM呼吸灯
    Win10开机桌面无限刷新的解决方法
    算法练习题(涉外黄成老师)
    EarlyStopping
    Qt文件系统源码分析—第二篇QSaveFile
    centos7离线安装PHP7.4.30
    Nginx被它打败了?
  • 原文地址:https://blog.csdn.net/weixin_55435895/article/details/126062383