<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Dream_DD的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Dream_DD</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Dream_DD]]></copyright><item><title><![CDATA[Leetcode 第746题 使用最小花费爬楼梯 题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117898592</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117898592</guid><author>Dream_DD</author><pubDate>Mon, 14 Jun 2021 10:41:10 +0800</pubDate><description><![CDATA[题目描述

数组的每个下标作为一个阶梯，第 i 个阶梯对应着一个非负数的体力花费值 cost[i]（下标从 0 开始）。
每当你爬上一个阶梯你都要花费对应的体力值，一旦支付了相应的体力值，你就可以选择向上爬一个阶梯或者爬两个阶梯。
请你找出达到楼层顶部的最低花费。在开始时，你可以选择从下标为 0 或 1 的元素作为初始阶梯。


示例 ：
输入：cost = [10, 15, 20]
输出：15
解释：最低花费是从 cost[1] 开始，然后走两步即可到阶梯顶，一共花费 15 。

来源：力扣（LeetCo]]></description><category></category></item><item><title><![CDATA[Leetcode 第160题 相交链表 题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117849501</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117849501</guid><author>Dream_DD</author><pubDate>Sat, 12 Jun 2021 16:28:21 +0800</pubDate><description><![CDATA[题目描述

给你两个单链表的头节点 headA 和 headB ，请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点，返回 null 。
图示两个链表在节点 c1 开始相交：

来源：力扣（LeetCode）
链接：LeetCode

题目分析

（1）有一种比较浪漫的解法，就是A走完自己的路，然后走B的路，B走完自己的路后，走A的路，这样两个有交集并互相牵挂的A和B一定会在一起；
（2）假设相交之前的那部分，A的长度是a，B的长度是b，相交之后的那部分长度是公共部分，长度为c；
（3）当A走完自]]></description><category></category></item><item><title><![CDATA[Leetcode 第121题 买卖股票的最佳时机 题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117841026</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117841026</guid><author>Dream_DD</author><pubDate>Sat, 12 Jun 2021 11:00:33 +0800</pubDate><description><![CDATA[题目描述

给定一个数组 prices ，它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票，并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润，返回 0 。


示例 ：
输入：[7,1,5,3,6,4]
输出：5
解释：在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 = 5 。注意利润不能]]></description><category></category></item><item><title><![CDATA[Leetcode 第104题 二叉树的最大深度题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117815327</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117815327</guid><author>Dream_DD</author><pubDate>Fri, 11 Jun 2021 14:21:29 +0800</pubDate><description><![CDATA[题目描述

给定一个二叉树，找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。


示例：
给定二叉树 [3,9,20,null,null,15,7]，
返回它的最大深度 3 。

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）涉及树的题，大多可以用递归解，此题也一样，由于是求树的最大深度，则可递归求左右子树的最大深度，然后加1即可得到树的最大深度；
（2）递归的出口条件，是到达了叶子结点。
（3）另外一种解法是层序]]></description><category></category></item><item><title><![CDATA[Leetcode 第136题 只出现一次的数字题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117789713</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117789713</guid><author>Dream_DD</author><pubDate>Thu, 10 Jun 2021 19:30:36 +0800</pubDate><description><![CDATA[题目描述

给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
说明： 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗？


示例
输入: [2,2,1]
输出: 1

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）不考虑空间复杂度和时间复杂度的情况下，此题解法较多，可以用集合解，也可以排序解，还可以双指针等，但是限定了空间和时间复杂度后，解法也就受限制了；
（2）可以考虑位运算，具体而言是使用位运算中的异或运算]]></description><category></category></item><item><title><![CDATA[Leetcode 第557题 反转字符串中的单词 III 题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117751755</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117751755</guid><author>Dream_DD</author><pubDate>Wed, 09 Jun 2021 18:50:06 +0800</pubDate><description><![CDATA[题目描述

给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。


示例：
输入：“Let’s take LeetCode contest”
输出：“s’teL ekat edoCteeL tsetnoc”

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）由于java中String是不可变对象，因此要考虑在额外的字符数组或者StringBuilder上操作；
（2）用字符数组解时，由于要实现字符串中的单词反转，因此可以实现一个单词的反转方法，具]]></description><category></category></item><item><title><![CDATA[Leetcode 第237题 删除链表中的节点题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117747784</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117747784</guid><author>Dream_DD</author><pubDate>Wed, 09 Jun 2021 16:44:54 +0800</pubDate><description><![CDATA[题目描述

请编写一个函数，使其可以删除某个链表中给定的（非末尾）节点。传入函数的唯一参数为 要被删除的节点 。


示例 1：
输入：head = [4,5,1,9], node = 5
输出：[4,1,9]
解释：给定你链表中值为 5的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -&gt; 1 -&gt; 9.

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）node为传入的唯一参数，因此肯定只能在node的周围想办法，立马想到下一个节点，因为单链表没法访问上一节]]></description><category></category></item><item><title><![CDATA[Leetcode 第2题 两数相加题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117706293</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117706293</guid><author>Dream_DD</author><pubDate>Tue, 08 Jun 2021 16:23:05 +0800</pubDate><description><![CDATA[题目描述

给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。


请你将两个数相加，并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外，这两个数都不会以 0 开头。


示例：
输入：l1 = [2,4,3], l2 = [5,6,4]
输出：[7,0,8]
解释：342 + 465 = 807.

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）由于链表是逆序存每位数字，模拟加法操作，可把依次链]]></description><category></category></item><item><title><![CDATA[Leetcode 第206题 反转链表题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117694472</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117694472</guid><author>Dream_DD</author><pubDate>Tue, 08 Jun 2021 11:20:32 +0800</pubDate><description><![CDATA[题目描述

给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。


示例 ：
输入：head = [1,2,3,4,5]
输出：[5,4,3,2,1]

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）这道题很简单，但是在实习面试中却经常出现，因此熟练掌握很有必要；
（2）递归写法太简单，因此用迭代过程，模拟一下链表反转的过程，定义两个指针，一个指向当前结点，一个指向当前结点前一个结点，每次让当前结点重新链接到前一个结点即实现了反转，但是由于要遍历整个链表，因此每一]]></description><category></category></item><item><title><![CDATA[Leetcode 第53题 最大子序和题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117693123</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117693123</guid><author>Dream_DD</author><pubDate>Tue, 08 Jun 2021 10:52:16 +0800</pubDate><description><![CDATA[题目描述

给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。


示例 ：
输入：nums = [-2,1,-3,4,-1,2,1,-5,4]
输出：6 解释：连续子数组 [4,-1,2,1] 的和最大，为 6 。

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）每一次遍历到当前元素时，比如遍历到上述示例中的第二个元素1，需要考虑前面元素和加上此元素为-1，与此元素1的大小比较，取较大值1，使得其对结果的贡献尽可能大；
（2）]]></description><category></category></item><item><title><![CDATA[Leetcode 第26题 删除有序数组中的重复项题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117690329</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117690329</guid><author>Dream_DD</author><pubDate>Tue, 08 Jun 2021 09:52:51 +0800</pubDate><description><![CDATA[题目描述

给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。
不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。


示例 ：
输入：nums = [1,1,2] 输出：2, nums = [1,2]
解释：函数应该返回新的长度 2 ，并且原数组 nums的前两个元素被修改为 1, 2 ，不需要考虑数组中超出新长度后面的元素。

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（]]></description><category></category></item><item><title><![CDATA[Leetcode 第88题 合并两个有序数组题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117673011</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117673011</guid><author>Dream_DD</author><pubDate>Mon, 07 Jun 2021 20:00:51 +0800</pubDate><description><![CDATA[题目描述

给你两个有序整数数组 nums1 和 nums2，请你将 nums2 合并到 nums1 中，使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m +n，这样它就有足够的空间保存来自 nums2 的元素。


示例 1：
输入：nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出：[1,2,2,3,5,6]

来源：力扣（LeetCode）
链接]]></description><category></category></item><item><title><![CDATA[Leetcode 第70题 爬楼梯题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117478891</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117478891</guid><author>Dream_DD</author><pubDate>Wed, 02 Jun 2021 19:01:26 +0800</pubDate><description><![CDATA[题目描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
注意：给定 n 是一个正整数。


示例 ：
输入： 2 输出： 2 解释： 有两种方法可以爬到楼顶。

1 阶 + 1 阶
2 阶


来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）如果熟悉斐波那契会发现，其实这就是斐波那契数列相关的问题，诸如此类的描述还有青蛙跳台阶和第n个月兔子的问题等。
（2）但是此题如果直接调用递归公式，必然会导致递归深度过]]></description><category></category></item><item><title><![CDATA[Leetcode 第21题 合并两个有序链表题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117477587</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117477587</guid><author>Dream_DD</author><pubDate>Wed, 02 Jun 2021 18:28:47 +0800</pubDate><description><![CDATA[题目描述

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


示例 ：
输入：l1 = [1,2,4], l2 = [1,3,4] 输出：[1,1,2,3,4,4]

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）由于两个链表是有序的，因此逐一两个链表的结点对比就可以合并，时间复杂度为O(m+n);


（2）有迭代和递归两种方法；就迭代而言，主要是注意指针的链接，还要设置当前指针指向新链表的尾部，每次比较两个链表头部的结点值，]]></description><category></category></item><item><title><![CDATA[Leetcode 第14题 最长公共前缀题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117418580</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117418580</guid><author>Dream_DD</author><pubDate>Mon, 31 May 2021 16:07:26 +0800</pubDate><description><![CDATA[题目描述

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀，返回空字符串 “”。


示例 1：
输入：strs = [“flower”,“flow”,“flight”] 输出：“fl”

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）考虑上述事例，如果用人工方法找公共前缀，我们通常的做法是，看前两个字符串的公共前缀，得到前缀为flow，然后用这个前缀flow继续与第三个比较，得到最终结果为fl；
（2）算法也是一样的流程，因此需要解决两个问题，第一是如何求得]]></description><category></category></item><item><title><![CDATA[Leetcode 第9题 回文数题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117417342</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117417342</guid><author>Dream_DD</author><pubDate>Mon, 31 May 2021 15:28:48 +0800</pubDate><description><![CDATA[题目描述

给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。
回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。例如，121 是回文，而 123 不是。

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）与整数反转一样，回文数也需要反转，但是并不需要全部反转，由于回文数是对称的，因此当循环进行到一半时，即可判断是不是回文数；
（2）但是也要分两种情况，奇数位数和偶数位数，比如121和1221，这两种情况是不太一样的，因为121划]]></description><category></category></item><item><title><![CDATA[Leetcode 第七题 整数反转题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117353471</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117353471</guid><author>Dream_DD</author><pubDate>Fri, 28 May 2021 10:20:41 +0800</pubDate><description><![CDATA[题目描述

给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
假设环境不允许存储 64 位整数（有符号或无符号）。

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）简单的整数反转，通过不断除和求余，再累加即可，余数作为每一次的累加对象，而除得到的结果作为下一次被求余的对象。
（2）形式化就是，如321这个数，321求余得到1，先令res=1，而321/10]]></description><category></category></item><item><title><![CDATA[Leetcode 剑指 Offer 39 数组中出现次数超过一半的数字题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/117002551</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/117002551</guid><author>Dream_DD</author><pubDate>Tue, 18 May 2021 22:50:55 +0800</pubDate><description><![CDATA[题目描述

数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。

你可以假设数组是非空的，并且给定的数组总是存在多数元素。

来源：力扣（LeetCode）
链接：LeetCode
题目分析

（1）首先考虑较简单的方法，既然题目已经说了这个数字出现次数超过数组长度的一半，那把数组排序后，数组中间的数肯定就是这个数呀，既然如此，两步搞定，排序+返回中间的数；

（2）但貌似这样做太没水平了，想个效率高点的方法，毕竟排序基本都O(NlogN)，看看能否降到O(N);

（3）姑且称这个要找的数为众]]></description><category></category></item><item><title><![CDATA[Leetcode 第15题 三数之和题解]]></title><link>https://blog.youkuaiyun.com/Dream_DD/article/details/116998962</link><guid>https://blog.youkuaiyun.com/Dream_DD/article/details/116998962</guid><author>Dream_DD</author><pubDate>Tue, 18 May 2021 20:05:22 +0800</pubDate><description><![CDATA[Leetcode 第15题 三数之和题解
题目描述

给你一个包含 n 个整数的数组 nums，判断 nums 中是否存在三个元素 a，b，c ，使得 a + b + c = 0 ？请你找出所有和为 0 且不重复的三元组。

注意：答案中不可以包含重复的三元组。

来源：力扣（LeetCode）
链接：LeetCode
题解

（1）拿到此类题目肯定不要第一时间考虑暴力解，此题考虑暴力解，要至少三层循环，时间复杂度，一下干到O(n3)，而且也不能很好保证上述所说的不重复，这显然不是一个好的解；

（2）那么]]></description><category></category></item></channel></rss>