<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[nlp87v5的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/nlp87v5</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; nlp87v5]]></copyright><item><title><![CDATA[dfs常规设计思路：LeetCode:#1575.统计所有可行路径]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/121899905</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/121899905</guid><author>nlp87v5</author><pubDate>Mon, 13 Dec 2021 11:00:21 +0800</pubDate><description><![CDATA[设计dfs算法有三个思路：

1. 设计好递归函数的【入参】和【出参】

2. 设计好递归函数的出口（Base Case）

3. 编写【最小单元】处理逻辑

通常Base Case是三部曲中最难的。

以一道题为例：

Question:

给你一个 互不相同 的整数数组，其中 locations[i] 表示第 i 个城市的位置。同时给你 start，finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量

每一步中，如果你在城市 i ，你可以选择任意一个城市 j ，满足 j !.]]></description><category></category></item><item><title><![CDATA[动态规划相关问题]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/121643162</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/121643162</guid><author>nlp87v5</author><pubDate>Tue, 30 Nov 2021 21:59:52 +0800</pubDate><description><![CDATA[1. 我们是如何确定本题可以使用动态规划来解决的？

通常我们要从有无后效性进行入手分析。

如果对于某个状态，我们可以只关注状态的值，而不需要关注状态是如何转移过来的话，那么这就是一个无后效性的问题，可以考虑使用DP解决。

后效性分析：

某阶段的状态一旦确定，则此后过程的演变不再受此前各种状态及决策的影响。

如果之前的决策对未来的决策进行了一定的限制，也就是之前影响了未来，那么这就叫有后效性。

2. 我们是如何确定本题的状态定义的？

DP的状态定义很大程度是靠经验去猜的。

虽然大多数情况都是猜]]></description><category></category></item><item><title><![CDATA[动态规划专栏：Leetcode：#62 不同路径]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/121620585</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/121620585</guid><author>nlp87v5</author><pubDate>Mon, 29 Nov 2021 21:55:54 +0800</pubDate><description><![CDATA[Question:

一个机器人位于一个 m x n 网格的左上角 （起始点在下图中标记为 “Start” ）。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角（在下图中标记为 “Finish” ）。

问总共有多少条不同的路径？



Resolution:

dp路径问题

二元数组f[i][j]记录到达（i,j）存在的路径数

定义状态方程：

1. 当只能通过右移到达（i,j）,f[i][j]=f[i-1][j]

2. 当只能通过下移到达（i,j）,f[i][j]=f[i][j-]]></description><category></category></item><item><title><![CDATA[贪心算法专栏：Leetcode#502 IPO]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/121610882</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/121610882</guid><author>nlp87v5</author><pubDate>Mon, 29 Nov 2021 15:24:47 +0800</pubDate><description><![CDATA[Question:

假设 力扣（LeetCode）即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司，力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限，它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。

给你 n 个项目。对于每个项目 i ，它都有一个纯利润 profits[i] ，和启动该项目需要的最小资本 capital[i] 。

最初，你的资本为 w 。当你完成一个项目时，你将获得纯利润，且利润将被添加到你]]></description><category></category></item><item><title><![CDATA[贪心算法专栏：Leetcode#397 整数替换]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/121509070</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/121509070</guid><author>nlp87v5</author><pubDate>Wed, 24 Nov 2021 11:03:00 +0800</pubDate><description><![CDATA[Question:

给定一个正整数 n ，你可以做如下操作：

 如果 n 是偶数，则用 n / 2替换 n 。
 如果 n 是奇数，则可以用 n + 1或n - 1替换 n 。

n 变为 1 所需的最小替换次数是多少？

Resolution:

1. 记忆化map集合+深度优先搜索:


public class IntegerReplacement {
    Map&lt;Long, Integer&gt; map = new HashMap&lt;&gt;();
    publi...]]></description><category></category></item><item><title><![CDATA[贪心算法专栏：Leetcode:#11盛最多水的容器]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/121457462</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/121457462</guid><author>nlp87v5</author><pubDate>Sun, 21 Nov 2021 18:24:18 +0800</pubDate><description><![CDATA[Question:

给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线，垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线，使得它们与x轴共同构成的容器可以容纳最多的水。

说明：你不能倾斜容器。



Resolution:

先用两个指针 i 和 j 指向左右边界，然后考虑指针应该怎么移动。

由于构成矩形的面积，取决于 i 和 j 之间的距离（记为 w） 和 i 和 j 下标对应的高度的最小值（记...]]></description><category></category></item><item><title><![CDATA[【SpringBoot】视图解析及地址路由相关总结]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/121158609</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/121158609</guid><author>nlp87v5</author><pubDate>Fri, 05 Nov 2021 11:26:15 +0800</pubDate><description><![CDATA[Springboot官方推荐的Themeleaf提供自动渲染模板页功能：


public class ThymeleafProperties {
    private static final Charset DEFAULT_ENCODING;
    public static final String DEFAULT_PREFIX = "classpath:/templates/";
    public static final String DEFAULT_SUFFIX = ".html";
}]]></description><category></category></item><item><title><![CDATA[双指针/二分法【有效三角形的个数】一题双解]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/120861032</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/120861032</guid><author>nlp87v5</author><pubDate>Wed, 20 Oct 2021 16:07:17 +0800</pubDate><description><![CDATA[Question:

给定一个包含非负整数的数组，你的任务是统计其中可以组成三角形三条边的三元组个数。

本题实质是找到符合条件的【三元组值】。

【二分法】

我们在枚举前对数组进行升序排序，通过从前向后枚举最小值下标i和较小值下标j，可以在求解最大值下标m的时候固定前两个解，固定两个值的情况下我们只需要在第三个值的选取上做文章即可。

不难发现，根据式子nums[i] + nums[j] &gt; nums[m]，我们只需要找到符合该式子的m的最大下标k，从j+1到k均为符合条件的解。

问题聚焦到如.]]></description><category></category></item><item><title><![CDATA[Dichotomy专栏：Leetcode:#33 搜索旋转排序数组]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/120621509</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/120621509</guid><author>nlp87v5</author><pubDate>Wed, 06 Oct 2021 10:12:19 +0800</pubDate><description><![CDATA[Question:

整数数组 nums 按升序排列，数组中的值 互不相同 。

在传递给函数之前，nums 在预先未知的某个下标 k（0 &lt;= k &lt; nums.length）上进行了 旋转，使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]（下标 从 0 开始 计数）。例如， [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。

给你 旋转后 .]]></description><category></category></item><item><title><![CDATA[SlideWindow专栏：Leetcode#1838 最高频元素的频数]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/120604928</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/120604928</guid><author>nlp87v5</author><pubDate>Mon, 04 Oct 2021 16:31:31 +0800</pubDate><description><![CDATA[Question:

元素的 频数 是该元素在一个数组中出现的次数。

给你一个整数数组 nums 和一个整数 k 。在一步操作中，你可以选择 nums 的一个下标，并将该下标对应元素的值增加 1 。

执行最多 k 次操作后，返回数组中最高频元素的 最大可能频数 。

Example：

输入：nums = [1,2,4], k = 5
输出：3
解释：对第一个元素执行 3 次递增操作，对第二个元素执 2 次递增操作，此时 nums = [4,4,4] 。
4 是数组中最高频元素，频数是 3 。

Res]]></description><category></category></item><item><title><![CDATA[SlideWindow专栏：leetcode#220 存在重复元素Ⅲ]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/120354930</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/120354930</guid><author>nlp87v5</author><pubDate>Sat, 18 Sep 2021 15:32:30 +0800</pubDate><description><![CDATA[Question:

给你一个整数数组 nums 和两个整数k 和 t 。请你判断是否存在 两个不同下标 i 和 j，使得abs(nums[i] - nums[j]) &lt;= t ，同时又满足 abs(i - j) &lt;= k 。

如果存在则返回 true，不存在返回 false。

Example:


输入：nums = [1,2,3,1], k = 3, t = 0
输出：true

Resolution:

对于序列中的每个元素x，我们都一律只考虑元素x的左侧至多k个元素，而不考虑右侧..]]></description><category></category></item><item><title><![CDATA[SlideWindow专栏：leetcode#30 串联所有单词的子串(hard)]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/120334481</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/120334481</guid><author>nlp87v5</author><pubDate>Thu, 16 Sep 2021 18:19:18 +0800</pubDate><description><![CDATA[Question:

给定一个字符串s和一些 长度相同 的单词words 。找出 s 中恰好可以由words 中所有单词串联形成的子串的起始位置。

注意子串要与words 中的单词完全匹配，中间不能有其他字符 ，但不需要考虑words中单词串联的顺序。

Example:

输入：s = "barfoothefoobarman", words = ["foo","bar"]
输出：[0,9]
解释：
从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。
输出的顺序...]]></description><category></category></item><item><title><![CDATA[力扣#3 无重复字符的最长字串（难度：中等）]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/120303250</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/120303250</guid><author>nlp87v5</author><pubDate>Wed, 15 Sep 2021 12:01:54 +0800</pubDate><description><![CDATA[今天开启一个新的专题：滑动窗口。跟随着宫水三叶 ’s exercise diary，已经走过了simulation，doublepointer两个专题，刷过了如下的题目：



做个简单的总结八：模拟类题目只需要将题设给出的迭代规则转换为java代码，而doublepoiner相对较复杂，有前后快慢指针，有二分指针，根据题目做具体分析。

今天来看一个滑动窗口的题目：

给定一个字符串s，请你找出其中不含有重复字符的最长子串的长度。

我们遍历过程中用一个hashmap记录迭代过的字符，并记录下标...]]></description><category></category></item><item><title><![CDATA[力扣#424 替换后的最长重复字符（难度：中等）]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/119934543</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/119934543</guid><author>nlp87v5</author><pubDate>Thu, 26 Aug 2021 16:35:58 +0800</pubDate><description><![CDATA[题目：

给你一个仅由大写英文字母组成的字符串，你可以将任意位置上的字符替换成另外的字符，总共可最多替换k次。在执行上述操作后，找到包含重复字母的最长子串的长度。

注意：字符串长度 和 k 不会超过104。

解题思路：

本题利用双指针+滑动窗口的方法进行求解。

初始窗口的宽度为1，我们不断的通过向当前窗口覆盖的子串后面追加一个字符看是否能满足我们的要求，那么如何判断该字符串是否满足我们的要求：

如果当前字符串中的出现次数最多的字母个数+K大于串长度，那么这个串就是满足条件的；

我们维护...]]></description><category></category></item><item><title><![CDATA[力扣#413 等差数列划分（难度：中等）]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/119912783</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/119912783</guid><author>nlp87v5</author><pubDate>Wed, 25 Aug 2021 15:49:57 +0800</pubDate><description><![CDATA[题目：

如果一个数列 至少有三个元素 ，并且任意两个相邻元素之差相同，则称该数列为等差数列。

例如，[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
给你一个整数数组 nums ，返回数组 nums 中所有为等差数组的 子数组 个数。

子数组 是数组中的一个连续序列。

示例1：


输入：nums = [1,2,3,4]
输出：3
解释：nums 中有三个子等差数组：[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。

解题思路：

我们以]]></description><category></category></item><item><title><![CDATA[力扣#395 至少有K个重复字符的最长子串（难度：中等）]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/119854121</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/119854121</guid><author>nlp87v5</author><pubDate>Sun, 22 Aug 2021 16:38:31 +0800</pubDate><description><![CDATA[题目：

给你一个字符串s和一个整数k，请你找出s中的最长子串，要求该子串中的每一字符出现次数都不少于k。返回这一子串的长度。

解题思路：

假设长度t的一段区间满足要求的话，t+1长度的区间是否满足条件是不确定的，取决于t+1个位置出现的字符是否在原有区间内：

1. 如果新位置的字符在原有区间内，那必然还是满足出现次数大于K；

2. 如果新位置的字符在原有区间没出现过，那新字符的出现次数只有一次，那必然不满足要求；

因此我们无法使用二分法，相应的也无法直接使用【滑动窗口】+【双指...]]></description><category></category></item><item><title><![CDATA[力扣#16 最接近的三数之和（难度：中等）]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/119332218</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/119332218</guid><author>nlp87v5</author><pubDate>Mon, 02 Aug 2021 19:49:36 +0800</pubDate><description><![CDATA[题目：

给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数，使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。

示例：


输入：nums = [-1,2,1,-4], target = 1
输出：2
解释：与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

解题思路：

本题使用排序+双指针的方法，对数组进行升序排序，用res记录当前最优解，遍历数组：

  令前指针指向下一个元素，后指针...]]></description><category></category></item><item><title><![CDATA[力扣#11 称最多水的容器（难度：中等）]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/119280957</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/119280957</guid><author>nlp87v5</author><pubDate>Sat, 31 Jul 2021 21:13:33 +0800</pubDate><description><![CDATA[题目：

给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线，垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线，使得它们与x轴共同构成的容器可以容纳最多的水。

说明：你不能倾斜容器。

示例：

输入：[1,8,6,2,5,4,8,3,7]
输出：49
解释：图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为49。

解题思路：

...]]></description><category></category></item><item><title><![CDATA[力扣#3 无重复字符的最长子串（难度：中等）]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/119250539</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/119250539</guid><author>nlp87v5</author><pubDate>Fri, 30 Jul 2021 16:42:13 +0800</pubDate><description><![CDATA[题目：

给定一个字符串s，请你找出其中不含有重复字符的最长子串的长度。

解题思路：

本题考查双指针+滑动窗口思想。

每次用双指针和一个哈希map维护一个子串，哈希表中以(字符，出现下标)的格式记录字串信息，前指针记录子串的开始，后指针向后移动，当移动到一个map中存在的字符，滑动窗口向后移动，分为两个步骤：

1. 首先确定前后指针的位置，由于后指针指向的字符与字串中某个字符重复，所以前指针为哈希表中记录的重复字符出现的下标的下一个位置，后指针向后移动一个，

2. 更新哈希表和最长字串长度...]]></description><category></category></item><item><title><![CDATA[力扣#451 根据字符串出现频率排序（难度：中等）]]></title><link>https://blog.youkuaiyun.com/nlp87v5/article/details/119220982</link><guid>https://blog.youkuaiyun.com/nlp87v5/article/details/119220982</guid><author>nlp87v5</author><pubDate>Thu, 29 Jul 2021 21:23:44 +0800</pubDate><description><![CDATA[题目：

给定一个字符串，请将字符串里的字符按照出现的频率降序排列。

示例1：

输入:
"tree"

输出:
"eert"

解释:
'e'出现两次，'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外，"eetr"也是一个有效的答案。

解题思路：

本题是考查数据结构运用的模拟题。

1. 先使用哈希表对词频进行统计；

2. 遍历统计好词频的哈希表，将每个键值对对象以{字符，词频}的形式存储到大顶堆中。

3. 从大顶堆中依次弹出，构造答案字符串。

代码示例：


   ]]></description><category></category></item></channel></rss>