<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lemonade13的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/lemonade13</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; lemonade13]]></copyright><item><title><![CDATA[【leetcode】【medium】【每日一题】1202. 交换字符串中的元素]]></title><link>https://blog.csdn.net/lemonade13/article/details/112478190</link><guid>https://blog.csdn.net/lemonade13/article/details/112478190</guid><author>lemonade13</author><pubDate>Mon, 11 Jan 2021 17:16:24 +0800</pubDate><description><![CDATA[1202. 交换字符串中的元素

给你一个字符串s，以及该字符串中的一些「索引对」数组pairs，其中pairs[i] =[a, b]表示字符串中的两个索引（编号从 0 开始）。

你可以任意多次交换在pairs中任意一对索引处的字符。

返回在经过若干次交换后，s可以变成的按字典序最小的字符串。

示例 1:


输入：s = "dcab", pairs = [[0,3],[1,2]]
输出："bacd"
解释： 
交换 s[0] 和 s[3], s = "bcad"
交换 s[1] ...]]></description><category></category></item><item><title><![CDATA[并查集总结｜实现优化思路]]></title><link>https://blog.csdn.net/lemonade13/article/details/112473972</link><guid>https://blog.csdn.net/lemonade13/article/details/112473972</guid><author>lemonade13</author><pubDate>Mon, 11 Jan 2021 16:19:03 +0800</pubDate><description><![CDATA[目的

解决连接问题。

实现图相关算法，是一种特别的树形结构。



应用

1）连接问题：图上任意2个点是能通过中间点连通

！不能回答路径问题

2）数学中集合类的实现



复杂度

时间复杂度近乎为O（1）



实现思路

基本操作

union(p,q) ：把q点和p点各自所属的组的所有点合并成一个

find(p) ：查询点p所属的组

isConnected(p,q) ：判断点p和q是否属于同一组



实现1：数组

数组的idx对应的值 表示其属于的哪个集合



实现2：数...]]></description><category></category></item><item><title><![CDATA[排序算法总结｜基本思路]]></title><link>https://blog.csdn.net/lemonade13/article/details/112472425</link><guid>https://blog.csdn.net/lemonade13/article/details/112472425</guid><author>lemonade13</author><pubDate>Mon, 11 Jan 2021 15:58:14 +0800</pubDate><description><![CDATA[本文参考bobo老师的教学视频。

O(n^2)的算法

1. 选择排序

每次选最小的元素，放到前面排序部分的最后一个位置



2. 插入排序

每次从未排序部分取第一个元素，不断向前面排好序里的元素比大小+交换，直到插入合适位置

缺点：频繁交换位置，交换操作耗时

改进：前面排序部分后移，直到找到合适位置再将元素放入

优点：在近乎有序的时候，插入效果近似O(n)



3. 希尔排序（插入的改进）

出发点：插入在近乎有序的时候很快，所以希尔先在大跨度上排序，然后逐渐减小步长



4. 冒...]]></description><category></category></item><item><title><![CDATA[【leetcode】【medium】【每日一题】189. 旋转数组​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/112348923</link><guid>https://blog.csdn.net/lemonade13/article/details/112348923</guid><author>lemonade13</author><pubDate>Fri, 08 Jan 2021 11:41:03 +0800</pubDate><description><![CDATA[189. 旋转数组

给定一个数组，将数组中的元素向右移动k个位置，其中k是非负数。

示例 1:


输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]

示例2:


输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释: 
向右旋转 1 步: ...]]></description><category></category></item><item><title><![CDATA[【leetcode】【easy】【每日一题】830. 较大分组的位置]]></title><link>https://blog.csdn.net/lemonade13/article/details/112248847</link><guid>https://blog.csdn.net/lemonade13/article/details/112248847</guid><author>lemonade13</author><pubDate>Tue, 05 Jan 2021 18:06:59 +0800</pubDate><description><![CDATA[830. 较大分组的位置

在一个由小写字母构成的字符串s中，包含由一些连续的相同字符所构成的分组。

例如，在字符串s = "abbxxxxzyy"中，就含有"a","bb","xxxx","z"和"yy"这样的一些分组。

分组可以用区间[start, end]表示，其中start和end分别表示该分组的起始和终止位置的下标。上例中的"xxxx"分组用区间表示为[3,6]。

我们称所有包含大于或等于三个连续字符的分组为较大分组。

找到每一个较大分组的...]]></description><category></category></item><item><title><![CDATA[【leetcode】【easy】【每日一题】509. 斐波那契数]]></title><link>https://blog.csdn.net/lemonade13/article/details/112184850</link><guid>https://blog.csdn.net/lemonade13/article/details/112184850</guid><author>lemonade13</author><pubDate>Mon, 04 Jan 2021 16:36:45 +0800</pubDate><description><![CDATA[509. 斐波那契数

斐波那契数，通常用F(n)表示，形成的序列称为斐波那契数列。该数列由0和1开始，后面的每一项数字都是前面两项数字的和。也就是：


F(0) = 0，F(1)= 1
F(n) = F(n - 1) + F(n - 2)，其中 n &gt; 1


给你n，请计算F(n)。

示例 1：


输入：2
输出：1
解释：F(2) = F(1) + F(0) = 1 + 0 = 1


示例 2：


输入：3
输出：2
解释：F(3) = F(2) + F(1)...]]></description><category></category></item><item><title><![CDATA[【leetcode】【medium】1143. 最长公共子序列​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/110551796</link><guid>https://blog.csdn.net/lemonade13/article/details/110551796</guid><author>lemonade13</author><pubDate>Thu, 03 Dec 2020 17:23:14 +0800</pubDate><description><![CDATA[1143. 最长公共子序列

给定两个字符串text1和text2，返回这两个字符串的最长公共子序列的长度。

一个字符串的子序列是指这样一个新的字符串：它是由原字符串在不改变字符的相对顺序的情况下删除某些字符（也可以不删除任何字符）后组成的新字符串。
例如，"ace" 是 "abcde" 的子序列，但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。

若这两个字符串没有公共子序列，则返回 0。

示例 1:


输入：text1 = "a...]]></description><category></category></item><item><title><![CDATA[【leetcode】【easy】剑指 Offer 54. 二叉搜索树的第k大节点​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/110391559</link><guid>https://blog.csdn.net/lemonade13/article/details/110391559</guid><author>lemonade13</author><pubDate>Tue, 01 Dec 2020 10:40:12 +0800</pubDate><description><![CDATA[剑指 Offer 54. 二叉搜索树的第k大节点

给定一棵二叉搜索树，请找出其中第k大的节点。

示例 1:


输入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
  2
输出: 4

示例 2:


输入: root = [5,3,6,2,4,null,null,1], k = 3
       5
      / \
     3   6
    / \
   2   4
  /
 1
输出: 4


限制：

1 ≤ k ≤ 二叉搜索树元.]]></description><category></category></item><item><title><![CDATA[【leetcode】【medium】剑指 Offer 34. 二叉树中和为某一值的路径]]></title><link>https://blog.csdn.net/lemonade13/article/details/110391174</link><guid>https://blog.csdn.net/lemonade13/article/details/110391174</guid><author>lemonade13</author><pubDate>Mon, 30 Nov 2020 16:28:49 +0800</pubDate><description><![CDATA[剑指 Offer 34. 二叉树中和为某一值的路径

输入一棵二叉树和一个整数，打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。

示例:
给定如下二叉树，以及目标和sum = 22，


              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1.]]></description><category></category></item><item><title><![CDATA[全栈js 调试/服务器 环境配置]]></title><link>https://blog.csdn.net/lemonade13/article/details/108858521</link><guid>https://blog.csdn.net/lemonade13/article/details/108858521</guid><author>lemonade13</author><pubDate>Thu, 22 Oct 2020 16:04:16 +0800</pubDate><description><![CDATA[mysql环境：https://juejin.im/post/6844903870053761037
]]></description><category></category></item><item><title><![CDATA[【leetcode】【easy】剑指 Offer 39. 数组中出现次数超过一半的数字]]></title><link>https://blog.csdn.net/lemonade13/article/details/109189244</link><guid>https://blog.csdn.net/lemonade13/article/details/109189244</guid><author>lemonade13</author><pubDate>Tue, 20 Oct 2020 20:58:33 +0800</pubDate><description><![CDATA[剑指 Offer 39. 数组中出现次数超过一半的数字

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

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

示例1:


输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2


限制：

1 &lt;= 数组长度 &lt;= 50000

注意：本题与主站 169 题相同：https://leetcode-cn.com/problems/majority-element/

题目链接：

https:...]]></description><category></category></item><item><title><![CDATA[【leetcode】【easy】剑指 Offer 57. 和为s的两个数字​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/109186821</link><guid>https://blog.csdn.net/lemonade13/article/details/109186821</guid><author>lemonade13</author><pubDate>Tue, 20 Oct 2020 18:54:33 +0800</pubDate><description><![CDATA[剑指 Offer 57. 和为s的两个数字

输入一个递增排序的数组和一个数字s，在数组中查找两个数，使得它们的和正好是s。如果有多对数字的和等于s，则输出任意一对即可。

示例 1：


输入：nums = [2,7,11,15], target = 9
输出：[2,7] 或者 [7,2]


示例 2：


输入：nums = [10,26,30,31,47,60], target = 40
输出：[10,30] 或者 [30,10]


限制：

1 &lt;= nums.length &lt;= 1]]></description><category></category></item><item><title><![CDATA[【leetcode】【easy】面试题 08.06. 汉诺塔问题​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/108163436</link><guid>https://blog.csdn.net/lemonade13/article/details/108163436</guid><author>lemonade13</author><pubDate>Sat, 22 Aug 2020 08:43:53 +0800</pubDate><description><![CDATA[面试题 08.06. 汉诺塔问题

在经典汉诺塔问题中，有 3 根柱子及 N 个不同大小的穿孔圆盘，盘子可以滑入任意一根柱子。一开始，所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。

请编写程序，用栈将所有盘子从第一根柱子移到最后一根柱子。

你需要原地修改栈。

示例1:


 输入：A = [2, 1, 0], B = [], ]]></description><category></category></item><item><title><![CDATA[【leetcode】【medium】752. 打开转盘锁​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/108153784</link><guid>https://blog.csdn.net/lemonade13/article/details/108153784</guid><author>lemonade13</author><pubDate>Fri, 21 Aug 2020 18:56:49 +0800</pubDate><description><![CDATA[752. 打开转盘锁



你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字：'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'。每个拨轮可以自由旋转：例如把'9'变为'0'，'0'变为'9'。每次旋转都只能旋转一个拨轮的一位数字。

锁的初始数字为'0000'，一个代表四个拨轮的数字的字符串。

列表deadends包含了一组死亡数字，一旦拨轮的数字和列表里的任何一个元素相同，这个锁将会被永久锁定，无法再被旋转。

字符串...]]></description><category></category></item><item><title><![CDATA[【leetcode】【medium】138. 复制带随机指针的链表​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/108141922</link><guid>https://blog.csdn.net/lemonade13/article/details/108141922</guid><author>lemonade13</author><pubDate>Fri, 21 Aug 2020 10:27:58 +0800</pubDate><description><![CDATA[138. 复制带随机指针的链表

给定一个链表，每个节点包含一个额外增加的随机指针，该指针可以指向链表中的任何节点或空节点。

要求返回这个链表的深拷贝。

我们用一个由n个节点组成的链表来表示输入/输出中的链表。每个节点用一个[val, random_index]表示：

val：一个表示Node.val的整数。
	random_index：随机指针指向的节点索引（范围从0到n-1）；如果不指向任何节点，则为null。
示例 1：




输入：head = [[7,null]...]]></description><category></category></item><item><title><![CDATA[【leetcode】【题目小结】n数之和]]></title><link>https://blog.csdn.net/lemonade13/article/details/108117993</link><guid>https://blog.csdn.net/lemonade13/article/details/108117993</guid><author>lemonade13</author><pubDate>Thu, 20 Aug 2020 16:23:45 +0800</pubDate><description><![CDATA[1. 2数之和

无序数组，找和为target的2个数字，返回下标。

解法：hash表记录之前遇到的数字，表中不存在互补的则继续向后找。



2. 2数之和-有序数组

有序数组，找和为target的2个数字。

解法：头尾双指针



3. 在BST上的2数之和

数据用BST形式储存。

解法1:BST中序遍历输出为有序数组，做法转为2。

解法2:hash表记录已遍历内容，做法类似1。

解法3:BST上的递归，看作从中间向两端的双指针。



4. 2数之和小于target

找出和小于t...]]></description><category></category></item><item><title><![CDATA[【leetcode】【easy】653. 两数之和 IV - 输入 BST]]></title><link>https://blog.csdn.net/lemonade13/article/details/108119147</link><guid>https://blog.csdn.net/lemonade13/article/details/108119147</guid><author>lemonade13</author><pubDate>Thu, 20 Aug 2020 11:39:10 +0800</pubDate><description><![CDATA[653. 两数之和 IV - 输入 BST

给定一个二叉搜索树和一个目标结果，如果 BST 中存在两个元素且它们的和等于给定的目标结果，则返回 true。

案例 1:


输入: 
    5
   / \
  3   6
 / \   \
2   4   7

Target = 9

输出: True


案例 2:


输入: 
    5
   / \
  3   6
 / \   \
2   4   7

Target = 28

输出: False

题目链接：https://leetcode]]></description><category></category></item><item><title><![CDATA[【leetcode】【easy】167. 两数之和 II - 输入有序数组​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/108118054</link><guid>https://blog.csdn.net/lemonade13/article/details/108118054</guid><author>lemonade13</author><pubDate>Thu, 20 Aug 2020 10:41:50 +0800</pubDate><description><![CDATA[167. 两数之和 II - 输入有序数组

给定一个已按照升序排列的有序数组，找到两个数使得它们相加之和等于目标数。

函数应该返回这两个下标值index1 和 index2，其中 index1必须小于index2。

说明:

返回的下标值（index1 和 index2）不是从零开始的。
	你可以假设每个输入只对应唯一的答案，而且你不可以重复使用相同的元素。
示例:


输入: numbers = [2, 7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之...]]></description><category></category></item><item><title><![CDATA[【leetocde】【easy】387. 字符串中的第一个唯一字符​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/108117635</link><guid>https://blog.csdn.net/lemonade13/article/details/108117635</guid><author>lemonade13</author><pubDate>Thu, 20 Aug 2020 10:10:33 +0800</pubDate><description><![CDATA[387. 字符串中的第一个唯一字符

给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。

示例：


s = "leetcode"
返回 0
s = "loveleetcode"
返回 2


提示：你可以假定该字符串只包含小写字母。

题目链接：https://leetcode-cn.com/problems/first-unique-character-in-a-string/

思路

先记录所有字符出现的次数，然后再取第一个次数为1的字符位置。


class ]]></description><category></category></item><item><title><![CDATA[【leetcode】【hard】295. 数据流的中位数​​​​​​​]]></title><link>https://blog.csdn.net/lemonade13/article/details/107895550</link><guid>https://blog.csdn.net/lemonade13/article/details/107895550</guid><author>lemonade13</author><pubDate>Sun, 09 Aug 2020 16:17:13 +0800</pubDate><description><![CDATA[295. 数据流的中位数

中位数是有序列表中间的数。如果列表长度是偶数，中位数则是中间两个数的平均值。例如，

[2,3,4]的中位数是 3

[2,3] 的中位数是 (2 + 3) / 2 = 2.5

设计一个支持以下两种操作的数据结构：

void addNum(int num) - 从数据流中添加一个整数到数据结构中。
	double findMedian() - 返回目前所有元素的中位数。
示例：


addNum(1)
addNum(2)
findMedian() -&gt; 1.5
add.]]></description><category></category></item></channel></rss>