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

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

力扣刷题之旅:进阶篇(三)_第1张图片

 

一、动态规划(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

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

你可能感兴趣的:(leetcode,算法,职场和发展)