<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dychf的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dychf</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dychf]]></copyright><item><title><![CDATA[requests.exceptions.ProxyError: HTTPConnectionPool(host=‘127.0.0.1‘, port=xxxx)]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/124495808</link><guid>https://blog.youkuaiyun.com/dychf/article/details/124495808</guid><author>dychf</author><pubDate>Fri, 29 Apr 2022 14:55:13 +0800</pubDate><description><![CDATA[requests.exceptions.ProxyError: HTTPConnectionPool(host='127.0.0.1', port=xxx) 解决方法]]></description><category></category></item><item><title><![CDATA[无界背包经典题目]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/124232325</link><guid>https://blog.youkuaiyun.com/dychf/article/details/124232325</guid><author>dychf</author><pubDate>Sun, 17 Apr 2022 19:18:38 +0800</pubDate><description><![CDATA[最少的硬币数目(零钱兑换)
描述：给定一个无重复数组nums，求构成目标数target使用最少的数字个数。数组中数字可以重复使用。
因为数字可以重复使用，不再是0-1背包问题，而是无界背包问题（也叫完全背包）。
分析：定义 F(i)F(i)F(i) 表示组成目标值 iii 所需要的最少数字数量, 那么 F(i)F(i)F(i) 对应的状态转移方程为:
F(i)=min⁡j=0..n−1F(i−cj)+1
F(i)=\min _{j=0 . . n-1} F\left(i-c_{j}\right)+1
F(i]]></description><category></category></item><item><title><![CDATA[判断数字是否为回文数字]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/124220180</link><guid>https://blog.youkuaiyun.com/dychf/article/details/124220180</guid><author>dychf</author><pubDate>Sat, 16 Apr 2022 20:54:06 +0800</pubDate><description><![CDATA[不难想到将数字转换成字符串进行回文字符串的判断。
对于数字，有比较巧妙的办法：

将数字每次除以10作为前一半
将数字每次对10取模作为后一半
判断前一半和后一半是否相等

public boolean palindrome(long num) {
   	if (num &lt; 0 || (num % 10 == 0 &amp;&amp; num != 0))
        return false;
    long x = 0;
    while (num &gt; x) {
        x]]></description><category></category></item><item><title><![CDATA[力扣6027]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/123644712</link><guid>https://blog.youkuaiyun.com/dychf/article/details/123644712</guid><author>dychf</author><pubDate>Mon, 21 Mar 2022 20:10:02 +0800</pubDate><description><![CDATA[描述： 给你一个下标从 0 开始的整数数组 nums 。如果两侧距 i 最近的不相等邻居的值均小于 nums[i] ，则下标 i 是 nums 中，某个峰的一部分。类似地，如果两侧距 i 最近的不相等邻居的值均大于 nums[i] ，则下标 i 是 nums 中某个谷的一部分。对于相邻下标 i 和 j ，如果 nums[i] == nums[j] ， 则认为这两下标属于 同一个 峰或谷。

注意，要使某个下标所做峰或谷的一部分，那么它左右两侧必须 都 存在不相等邻居。
返回 nums 中峰和谷的数量。
示例]]></description><category></category></item><item><title><![CDATA[力扣-241为运算表达式设计优先级]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/109369777</link><guid>https://blog.youkuaiyun.com/dychf/article/details/109369777</guid><author>dychf</author><pubDate>Thu, 29 Oct 2020 21:07:16 +0800</pubDate><description><![CDATA[题目
1.描述
给定一个含有数字和运算符的字符串，为表达式添加括号，改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。
2.示例
输入: "2-1-1"
输出: [0, 2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2
3.思路
使用递归, 遇到计算符号分别计算符号左侧的字符串的值以及符号右侧的值, 最后进行符号运算
4.代码
public List&lt;Integer&gt; diffWaysToCompute(String ]]></description><category></category></item><item><title><![CDATA[力扣-34查找区间]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/109126683</link><guid>https://blog.youkuaiyun.com/dychf/article/details/109126683</guid><author>dychf</author><pubDate>Fri, 16 Oct 2020 23:46:26 +0800</pubDate><description><![CDATA[题目
1.描述
给定一个按照升序排列的整数数组 nums，和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值，返回 [-1, -1]。
2.示例
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
3.思路
可以用二分查找找出第一个位置和最后一个位置，但是寻找的方法有所不同，需要实现两个二分查找。我们将寻找 target 最后一个位置，转换成寻找 target+1 第]]></description><category></category></item><item><title><![CDATA[力扣-153求旋转排序数组中的最小值]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108891310</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108891310</guid><author>dychf</author><pubDate>Wed, 30 Sep 2020 23:28:03 +0800</pubDate><description><![CDATA[题目
1.描述
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如，数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
请找出其中最小的元素。
2.示例
输入: [3,4,5,1,2]
输出: 1
3.思路
使用二分查找的思想,首先对只有一个元素和旋转下标为0的情况进行考虑 , 然后用中间元素和第一个元素进行比较

中间元素大于第一个元素, 在右半部分找最小值
中间元素小于第一个元素, 在左半部分找最小值
结束条件, left&lt;=right:

中间元素]]></description><category></category></item><item><title><![CDATA[力扣-278第一个错误的版本]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108859697</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108859697</guid><author>dychf</author><pubDate>Mon, 28 Sep 2020 23:25:55 +0800</pubDate><description><![CDATA[题目
1.描述
假设你有 n 个版本 [1, 2, …, n]，你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
2.示例
给定 n = 5，并且 version = 4 是第一个错误的版本。
调用 isBadVersion(3) -&gt; false
调用 isBadVersion(5) -&gt; tr]]></description><category></category></item><item><title><![CDATA[力扣-540有序数组中的单一元素]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108819425</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108819425</guid><author>dychf</author><pubDate>Sat, 26 Sep 2020 23:57:01 +0800</pubDate><description><![CDATA[题目
1.描述
给定一个只包含整数的有序数组，每个元素都会出现两次，唯有一个数只会出现一次，找出这个数。
2.示例
输入: [1,1,2,3,3,4,4,8,8]
输出: 2
3.思路
当m为偶数时, 如果 nums[m] == nums[m + 1]，那么 index 所在的数组位置为 [m + 2, h]，此时令 l = m + 2；如果 nums[m] != nums[m + 1]，那么 index 所在的数组位置为 [l, m]，此时令 h = m。
4.代码
public int singleNo]]></description><category></category></item><item><title><![CDATA[力扣-744寻找比目标字母大的最小字母]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108805874</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108805874</guid><author>dychf</author><pubDate>Fri, 25 Sep 2020 23:22:23 +0800</pubDate><description><![CDATA[题目
1.描述
给你一个排序后的字符列表 letters ，列表中只包含小写英文字母。另给出一个目标字母 target，请你寻找在这一有序列表里比目标字母大的最小字母。(想象成26个字母头尾相接组成一个环)
2.示例
输入:letters = ["c", "f", "j"] , target = "a", 输出:"c"
输入:letters = ["c", "f", "j"] , target = "c" , 输出: "f"
3.思路
使用二分查找, 但此处不是找相等, 而是找比目标大且离目标最近的值.
4]]></description><category></category></item><item><title><![CDATA[力扣-69x的平方根]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108784920</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108784920</guid><author>dychf</author><pubDate>Thu, 24 Sep 2020 22:30:17 +0800</pubDate><description><![CDATA[题目
1、描述
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根，其中 x 是非负整数。
由于返回类型是整数，结果只保留整数的部分，小数部分将被舍去。
2.示例
输入: 4  , 输出: 2
输入: 8 , 输出: 2
说明: 8 的平方根是 2.82842…, 由于返回类型是整数，小数部分将被舍去。
3.思路
二分查找，设置low=1， 和high=x，中间值为mid=low+(high-low)/2; 用x除mid，判断商值

mid==商, 返回商
mid &gt; 商，置hig]]></description><category></category></item><item><title><![CDATA[力扣-763划分字母区间]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108764323</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108764323</guid><author>dychf</author><pubDate>Wed, 23 Sep 2020 23:41:37 +0800</pubDate><description><![CDATA[题目
1.描述
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段，同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
2.示例
输入：S = "ababcbacadefegdehijhklij"
输出：[9,7,8]
解释：
划分结果为 "ababcbaca", "defegde", "hijhklij"。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 的划分是错误的，因为划分的片段数较少。
3.思路
找当前遇到]]></description><category></category></item><item><title><![CDATA[力扣-53最大子序和]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108742448</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108742448</guid><author>dychf</author><pubDate>Tue, 22 Sep 2020 22:14:37 +0800</pubDate><description><![CDATA[题目
1.描述
给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
2.示例
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大，为 6。
3.思路
主要思路就是, 在前面的元素相加, 和出现负数的情况下, 不再参加与后续元素的加法计算
4.代码
public int maxSubArray(int[] nums) {
    int sum = 0, res = nums[0];
	fo]]></description><category></category></item><item><title><![CDATA[力扣-665非递减数列]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108721379</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108721379</guid><author>dychf</author><pubDate>Mon, 21 Sep 2020 23:13:48 +0800</pubDate><description><![CDATA[题目
1.描述
给你一个长度为 n 的整数数组，请你判断在 最多 改变 1 个元素的情况下，该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的： 对于数组中所有的 i (0 &lt;= i &lt;= n-2)，总满足 nums[i] &lt;= nums[i + 1]。
2.示例
输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。
输入: nums = [4,2,1]
输出: false
解释: 你不能在只改变一个元素的情况下将]]></description><category></category></item><item><title><![CDATA[力扣-392判断子序列]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108700222</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108700222</guid><author>dychf</author><pubDate>Sun, 20 Sep 2020 22:56:20 +0800</pubDate><description><![CDATA[题目
1.描述
给定字符串 s 和 t ，判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些（也可以不删除）字符而不改变剩余字符相对位置形成的新字符串。（例如，"ace"是"abcde"的一个子序列，而"aec"不是）。
2.示例
s = "abc", t = "ahbgdc", 返回 true
s = "axc", t = "ahbgdc", 返回false
3.思路
可使用双指针法或动态规划法, 动态规划法的时间/空间复杂度相对较高.
4.代码

双指针法public static]]></description><category></category></item><item><title><![CDATA[力扣-605种花问题]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108687342</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108687342</guid><author>dychf</author><pubDate>Sat, 19 Sep 2020 23:19:36 +0800</pubDate><description><![CDATA[题目
1.描述
假设你有一个很长的花坛，一部分地块种植了花，另一部分却没有。可是，花卉不能种植在相邻的地块上，它们会争夺水源，两者都会死去。
给定一个花坛（表示为一个数组包含0和1，其中0表示没种植花，1表示种植了花），和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花？能则返回True，不能则返回False.
2.示例
输入: flowerbed = [1,0,0,0,1], n = 1
输出: True
3.思路
对数组元素进行遍历, 若当前元素为0, 则查看当前元素前后是否都为0. 若都为零表]]></description><category></category></item><item><title><![CDATA[力扣-122买卖股票的最大收益Ⅱ]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108674655</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108674655</guid><author>dychf</author><pubDate>Fri, 18 Sep 2020 23:33:55 +0800</pubDate><description><![CDATA[题目
1.描述
给定一个数组，它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易（多次买卖一支股票）。
注意：你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。
2.示例
输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天（股票价格 = 1）的时候买入，在第 3 天（股票价格 = 5）的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后，在第 4 天（股票价格 = 3）的时候买入，在第 5 天（股票]]></description><category></category></item><item><title><![CDATA[力扣-121买卖股票的最大时机]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108655392</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108655392</guid><author>dychf</author><pubDate>Thu, 17 Sep 2020 23:28:30 +0800</pubDate><description><![CDATA[题目
1.描述
给定一个数组，它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易（即买入和卖出一支股票一次），设计一个算法来计算你所能获取的最大利润。
注意：你不能在买入股票前卖出股票。
2.示例
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格；同时，你不能在买入前卖出股票。
3.思路
对]]></description><category></category></item><item><title><![CDATA[力扣-406根据身高重建队列(medium)]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108633005</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108633005</guid><author>dychf</author><pubDate>Thu, 17 Sep 2020 00:03:26 +0800</pubDate><description><![CDATA[题目
1.描述
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示，其中h是这个人的身高，k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
2.示例
输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
3.思路

需要先考虑高个子, 因为对于数据[6,1] [7,0] [7,1],若先考虑小个子,[7,0] [6,1]中[6,1]]]></description><category></category></item><item><title><![CDATA[力扣-452用最少数量的箭引爆气球(medium)]]></title><link>https://blog.youkuaiyun.com/dychf/article/details/108612070</link><guid>https://blog.youkuaiyun.com/dychf/article/details/108612070</guid><author>dychf</author><pubDate>Tue, 15 Sep 2020 23:22:39 +0800</pubDate><description><![CDATA[题目
1.描述
在二维空间中有许多球形的气球。对于每个气球，提供的输入是水平方向上，气球直径的开始和结束坐标。由于它是水平的，所以y坐标并不重要，因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。
一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭，若有一个气球的直径的开始和结束坐标为 xstart，xend， 且满足  xstart ≤ x ≤ xend，则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后，可以无限地前进。我们想找]]></description><category></category></item></channel></rss>