LEETCODE常见算法之动态规划DP超详细白话讲解(下)

接上文:LEETCODE常见算法之动态规划DP超详细白话讲解(上)

上一篇文章,我们使用了一道简单的例子来解释了动态规划的解题思路。本文我们来挑战一道相对复杂的问题,来对动态规划有一个更加深刻的理解。

先看例题:


LEETCODE 1312. 让字符串成为回文串的最少插入次数

给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。

请你返回让 s 成为回文串的 最少操作次数 。

「回文串」是正读和反读都相同的字符串。


继续阅读
发表在 leetcode | 标签为 , , , , , | 6条评论

LEETCODE常见算法之动态规划DP超详细白话讲解(上)

动态规划是Leetcode中比较常见的一类题型,面试时也经常被问到,还记得刚开始刷题时,我对这种题目非常恐惧,经常一头雾水,完全找不到思路。甚至看了别人的讲解后依然一知半解。但随着刷题量的增加,突然发现动态规划也没有那么复杂,绝大部分的题目都是大同小异,甚至让我感觉很多Hard级别的题目中,动态规划题目是相对容易的。本篇文章,我决定用实际的例子来分析,让大家明白动态规划到底是何方神圣。

先看下动态规划的定义:

动态规划(英语:Dynamic programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。

摘自维基百科

定义里有一句话非常关键,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。如果你无法理解这句话的含义没有关系,下面我们会用实际的例子来说明。

另外,什么题适合使用动态规划来解题呢?这是一个非常有价值的问题,虽然我还没有刷满Leetcode的全部题目,不过我还是总结出了两点心得:

继续阅读
发表在 leetcode | 标签为 , , , , , | 7条评论

LEETCODE 20. Valid Parentheses 解题思路分析

题目大意:

有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

继续阅读
发表在 leetcode | 标签为 , , | 留下评论

LEETCODE 14. Longest Common Prefix 解题思路分析

题目大意:

最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

继续阅读
发表在 leetcode | 标签为 , , , | 留下评论

LEETCODE 125. Valid Palindrome 解题思路分析

题目大意:

验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

继续阅读
发表在 leetcode | 标签为 , , , , | 留下评论

LEETCODE 28. Implement strStr() 解题思路分析

题目大意:

实现 strStr()

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

继续阅读
发表在 leetcode | 标签为 , , | 留下评论

LEETCODE 23. Merge k Sorted Lists 解题思路分析

题目大意:

合并K个排序链表

合并 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

继续阅读
发表在 leetcode | 标签为 , , , | 留下评论

LEETCODE 21. Merge Two Sorted Lists 解题思路分析

题目大意:

合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

继续阅读
发表在 leetcode | 标签为 , , | 一条评论

LEETCODE 1337. The K Weakest Rows in a Matrix 解题思路分析

题目大意:

方阵中战斗力最弱的 K 行

给你一个大小为 m * n 的方阵 mat,方阵由若干军人和平民组成,分别用 1 和 0 表示。

请你返回方阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。

如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。

军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。

继续阅读
发表在 leetcode | 标签为 , , , , | 留下评论

LEETCODE 1338. Reduce Array Size to The Half 解题思路分析

题目大意:

数组大小减半

给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。

返回 至少 能删除数组中的一半整数的整数集合的最小大小。

继续阅读
发表在 leetcode | 标签为 , , , | 留下评论