当前位置: 首页 > article >正文

力扣刷题之旅:进阶篇(三)

        力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。 

--点击进入刷题地址 


一、动态规划(DP)

  • 首先,让我们来看一个使用动态规划解决“最长回文子串”问题的代码示例:
def longestPalindrome(s: str) -> str:  
    n = len(s)  
    if n < 2:  
        return s  
      
    # dp[i][j] 表示从索引 i 到 j 的子串是否为回文串  
    dp = [[False] * n for _ in range(n)]  
    start, max_len = 0, 1  # 记录最长回文子串的起始位置和长度  
  
    # 单个字符一定是回文串  
    for i in range(n):  
        dp[i][i] = True  
        if n > 1 and s[i] == s[i + 1]:  
            dp[i][i + 1] = True  
            start = i  
            max_len = 2  
  
    # 检查长度大于 2 的子串  
    for l in range(3, n + 1):  
        for i in range(n - l + 1):  
            j = i + l - 1  
            if s[i] == s[j] and dp[i + 1][j - 1]:  
                dp[i][j] = True  
                if l > max_len:  
                    start = i  
                    max_len = l  
  
    return s[start:start + max_len]  
  
# 示例用法  
print(longestPalindrome("babad"))  # 输出: "bab"

二、回溯算法

  • 接下来,我们来看一个使用回溯算法解决“组合总和”问题的代码示例:
def combinationSum(candidates: List[int], target: int) -> List[List[int]]:  
    def backtrack(start, path, target):  
        if target == 0:  
            result.append(path)  
            return  
        for i in range(start, len(candidates)):  
            # 剪枝:如果当前数字大于目标值,则后续的数字一定也大于目标值,可以提前退出循环  
            if candidates[i] > target:  
                break  
            # 选择当前数字  
            backtrack(i, path + [candidates[i]], target - candidates[i])  
  
    candidates.sort()  # 对数组进行排序,有助于提前退出循环进行剪枝  
    result = []  
    backtrack(0, [], target)  
    return result  
  
# 示例用法  
print(combinationSum([2, 3, 6, 7], 7))  # 输出: [[2, 2, 3], [7]]

三、堆(Heap)

  • 最后,我们来看一个使用堆(特别是最小堆)解决“K个最小数”问题的代码示例:
import heapq  
  
def getKthSmallest(nums: List[int], k: int) -> int:  
    return heapq.nsmallest(k, nums)[-1]  
  
# 示例用法  
print(getKthSmallest([3,2,1,5,6,4], 2))  # 输出: 5

        这些代码示例展示了动态规划、回溯算法和堆在解决实际问题中的应用。通过不断学习和实践,我们可以逐渐掌握这些算法的核心思想和应用技巧,为解决更复杂的问题打下坚实的基础。


http://www.kler.cn/a/233392.html

相关文章:

  • 树形dp总结
  • 并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串【举一反三】
  • 解决 Redis 报错:`(error) NOAUTH Authentication required`
  • 数据结构-集合
  • 10款PDF合并工具的使用体验与推荐!!!
  • DHCP与FTP
  • Java异常的处理 try-catch-finally
  • Python 字符串模块
  • “OLED屏幕,色彩绚丽,画面清晰,让每一帧都生动无比。“#IIC协议【下】
  • JavaWeb02-MyBatis
  • QCoro: Qt C++ 20 协程库介绍
  • 基于图像掩膜和深度学习的花生豆分拣(附源码)
  • 【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 (上篇)
  • uni-app x,一个纯原生的Android App开发工具
  • 【力扣】复写零,栈 + 双指针法
  • 张楠辞任抖音集团CEO;东方甄选将开服饰号;小红书新增“附近”一级入口;华为分红770亿元
  • Vue3中路由配置Catch all routes (“*“) must .....问题
  • 通过Harbor构建docker私服仓库
  • 前端使用pdf.js进行pdf文件预览的第二种方式:Viewer.html
  • Quartus工程的qsf配置约束文件介绍
  • 【C语言】一道相当有难度的指针某大厂笔试真题(超详解)
  • 106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode)
  • RTE2023第九届实时互联网大会:揭秘未来互联网趋势,PPT分享引领行业新思考
  • Python基础篇_修饰符(Decorators)【下】
  • 常用的正则表达式
  • 一条 SQL 查询语句是如何执行的