<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Ucsasuke的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/Ucsasuke</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Ucsasuke]]></copyright><item><title><![CDATA[【无标题】]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/121370933</link><guid>https://blog.csdn.net/Ucsasuke/article/details/121370933</guid><author>Ucsasuke</author><pubDate>Wed, 17 Nov 2021 09:33:33 +0800</pubDate><description><![CDATA[Win64某些情况下无法直接打开Win32创建的文件夹
1、解释下问题含义，指在一个64位Windows系统上面（譬如Win7x64，Win10x64），如果一个32位的程序调用系统API打开文件对话框（譬如打开文件，保存文件）或者打开文件夹对话框，在指向系统盘下的Windows\System32目录时，会发现实际指向的是Windows\SysWOW64目录问题。
2、关于64位系统文件重定向问题，网上已经有很多文章进行了介绍，这里不再赘述（参考[1]）。
3、测试验证环境：Windows10 x64 19]]></description><category></category></item><item><title><![CDATA[OC-UIPickerView的循环显示]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/109335881</link><guid>https://blog.csdn.net/Ucsasuke/article/details/109335881</guid><author>Ucsasuke</author><pubDate>Wed, 28 Oct 2020 16:16:08 +0800</pubDate><description><![CDATA[（1）虽然pickerView没有自带这种循环滚动的功能，但我们可以把行数设成一个很大的值。然后让其在初始化时默认选择中间位置的项目。这样用户不管向上，还是向下基本上不能一次滚到底。

（2）同时我们在滚动停止后，还会自动将当前选中行移回到中间部分（当然动画要关闭，让用户察觉不到其实我们改变了选中行）。这样就会让用户保持无限滚动的幻觉。

参考https://blog.csdn.net/LiJF_ve/article/details/47907099?utm_medium=distribute.pc_f..]]></description><category></category></item><item><title><![CDATA[OC-解决UITextField与UITextView限制输入长度时，拼音预输入问题]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/109081492</link><guid>https://blog.csdn.net/Ucsasuke/article/details/109081492</guid><author>Ucsasuke</author><pubDate>Wed, 14 Oct 2020 19:45:02 +0800</pubDate><description><![CDATA[首先，在做输入限制长度时，使用- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string此代理方法会导致中文拼音输入时预输入状态被计算入限制长度中，
导致拼音拼写时不能超出限制长度的范围。在经历了大量折磨后，终于找到了解决办法。
1.在UITextView中，使用- (void)textViewDidChange:(UI]]></description><category></category></item><item><title><![CDATA[java-MYSQL常用语句以及MYSQL类型与java类型的对应]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/98241563</link><guid>https://blog.csdn.net/Ucsasuke/article/details/98241563</guid><author>Ucsasuke</author><pubDate>Fri, 02 Aug 2019 21:48:17 +0800</pubDate><description><![CDATA[我们在编程时经常需要用到MYSQL，所以必须对一些常用语句掌握。
创建数据库：
create database 数据库名；
删除数据库：
drop database 数据库名；
查询存储引擎：
show engines；
创建表：
create table 表名（属性名 数据类型 [完整性约束条件]，
属性名 数据类型 [完整性约束条件]，
）；
设置表的主键：
create table 表名（属...]]></description><category></category></item><item><title><![CDATA[java-集合之HashMap与HashSet与TreeMap分析]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/97814098</link><guid>https://blog.csdn.net/Ucsasuke/article/details/97814098</guid><author>Ucsasuke</author><pubDate>Tue, 30 Jul 2019 20:26:31 +0800</pubDate><description><![CDATA[HashMap与HashSet的区别：
第一，HashSet实现的是单列集合的Set集合。所以它没有索引，不能存储重复元素，且存取无序。而HashMap实现的是双列集合的Map集合。
第二，HashMap使用的是key值来计算hashcode，而HashSet使用对象来计算hashcode，所以HashMap存储是键值对的形式存储，不能有重复的键。而是用HashSet存储对象的话，一般需要重写ha...]]></description><category></category></item><item><title><![CDATA[java-ArrayList与LinkedList与Vector的区别和比较]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/97619563</link><guid>https://blog.csdn.net/Ucsasuke/article/details/97619563</guid><author>Ucsasuke</author><pubDate>Sun, 28 Jul 2019 21:35:42 +0800</pubDate><description><![CDATA[首先我们知道集合分为双列集合与单列集合，而单列集合又分为List和Set。
而list与set集合的区别是什么？
list集合是有索引的，允许存储重复元素，并且存取是有序的。
相反set集合没有索引，不能存储重复元素，存取无序。
而ArrayList，LinkedList和Vector都属于List集合，那么他们有什么区别和相同之处呢？
ArrayList与LinkedList：
相同：首先他们都...]]></description><category></category></item><item><title><![CDATA[java-利用集合实现斗地主]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/97575990</link><guid>https://blog.csdn.net/Ucsasuke/article/details/97575990</guid><author>Ucsasuke</author><pubDate>Sun, 28 Jul 2019 00:28:05 +0800</pubDate><description><![CDATA[斗地主相信大家都玩过，怎么来实现一个简单的斗地主功能呢?
思路：
我们可以利用双列集合来实现它。
首先把特殊牌大小王创建出来，然后创建一个集合来存储花色，另一个集合来存储A-K的牌。
利用循环来讲花色与牌组合起来。
然后打乱牌的顺序也就是洗牌过程。
再创建三个集合，分别代表三个玩家来存储手牌，用一个集合来存储底牌。
图解：

实现代码：
public static void main(String...]]></description><category></category></item><item><title><![CDATA[java-两个栈实现一个队列]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/97427047</link><guid>https://blog.csdn.net/Ucsasuke/article/details/97427047</guid><author>Ucsasuke</author><pubDate>Fri, 26 Jul 2019 22:29:23 +0800</pubDate><description><![CDATA[两个栈实现一个队列：
我们都知道栈的特性为先入后出，而队列则是先入先出。如何使用两个栈来实现一个队列呢？
思路：
用栈s1作为存储空间，栈s2作为缓存空间。
入队时，将数据压入s1中。
出队时，将数据从s1中弹出再压入s2中，再从s2弹出一个数据，再次将数据弹出并压入s1中。
出队操作图解：

实现代码：
class SeqStack{
// 存储栈的元素的数组
protected T[] sta...]]></description><category></category></item><item><title><![CDATA[java-约瑟夫环]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/97318406</link><guid>https://blog.csdn.net/Ucsasuke/article/details/97318406</guid><author>Ucsasuke</author><pubDate>Thu, 25 Jul 2019 23:51:59 +0800</pubDate><description><![CDATA[约瑟夫环问题：
已知n个人（以编号1，2，3…n分别表示）围坐在一张圆桌周围。从编号为k的人开始报数，数到m的那个人出列；他的下一个人又从1开始报数，数到m的那个人又出列；依此规律重复下去，直到圆桌周围的人全部出列。
思路1：就是通过一个数组，数组中每个元素都是一个人，然后对数组进行循环处理，每当数组中的人数到m时，将其标记为淘汰。直到最后数组中只有一个人未被淘汰。
思路2：利用链表实现，因为链表...]]></description><category></category></item><item><title><![CDATA[java-回溯算法解决轮船装载问题]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/97185459</link><guid>https://blog.csdn.net/Ucsasuke/article/details/97185459</guid><author>Ucsasuke</author><pubDate>Wed, 24 Jul 2019 23:46:27 +0800</pubDate><description><![CDATA[轮船装载问题：
有一组物品，其重量分别是：w1,w2…wn
现在有两艘轮船，其容量分别是C1和C2，
满足w1+w2+…+wn &lt;= C1 + C2
问怎么装载物品，才能够把物品全部装上轮船？
思路：
(1)首先将第一艘轮船尽可能装满；
(2)将剩余的集装箱装上第二艘轮船。
将第一艘轮船尽可能装满等价于选取全体集装箱的一个子集，使该子集中集装箱重量之和最接近C1。由此可知，装载问题等价于以下...]]></description><category></category></item><item><title><![CDATA[java-回溯算法子集树概念及解决01背包问题]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/97051199</link><guid>https://blog.csdn.net/Ucsasuke/article/details/97051199</guid><author>Ucsasuke</author><pubDate>Wed, 24 Jul 2019 00:00:37 +0800</pubDate><description><![CDATA[回溯算法：
回溯算法是对搜索树的一种深度优先搜索。
像大多数NP难问题一样，通过穷尽搜索数量巨大但有限多个可能性，可以获得一个解。而且，事实上对于所有这些问题都不存在用穷尽搜索之外的方法来解决问题。所以产生了开发系统化的搜索技术的需要，并且希望能够将搜索空间减少到尽可能小。
回溯法就是一种组织搜索的一般技术。回溯法可以被描述为有组织的穷举搜索，它常常可以避免搜索所有的可能性。
一般适用于求解那些有...]]></description><category></category></item><item><title><![CDATA[java-动态规划算法基本概念和解题思路，解决最大子段和的问题]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/96908717</link><guid>https://blog.csdn.net/Ucsasuke/article/details/96908717</guid><author>Ucsasuke</author><pubDate>Mon, 22 Jul 2019 23:07:15 +0800</pubDate><description><![CDATA[首先我们要清楚java共有五大算法，分别是分治算法，回溯算法，贪心算法，分支限界法以及动态规划法。而我们也需要清楚的对每个算法的基本思维与概念有了认识，才能去学习使用它来解决问题。
而动态规划法作为效率很高的求最优解的算法，我们要对它有所了解和掌握。
那么动态规划算法到底是什么思维来解决问题的呢？首先动态规划算法的基本概念要清楚认识。
1.动态规划的基本概念：
动态规划过程是：每次决策依赖于当前状...]]></description><category></category></item><item><title><![CDATA[java-链表中环的入口节点]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/96640625</link><guid>https://blog.csdn.net/Ucsasuke/article/details/96640625</guid><author>Ucsasuke</author><pubDate>Sat, 20 Jul 2019 22:32:33 +0800</pubDate><description><![CDATA[如果一个链表含有环的话，我们怎么去找到这个环的入口呢？
思路：首先我们知道链表不像数组，有下标可以访问其中的元素。所以我们只能用别的方法来思考，这时我们可以想到利用快慢指针的方法。定义两个指针来同时遍历链表，快指针一次走两个节点，慢指针一次走一个节点。如果快指针=慢指针，我们就知道这个链表确实有环，而且相交的节点是在环内的。我们利用画图与数学知识不难得到快慢指针之间走过的路程关系。

经过简单数学...]]></description><category></category></item><item><title><![CDATA[java-二叉树的镜像翻转]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/96505635</link><guid>https://blog.csdn.net/Ucsasuke/article/details/96505635</guid><author>Ucsasuke</author><pubDate>Fri, 19 Jul 2019 22:04:56 +0800</pubDate><description><![CDATA[思路：1：递归，如果节点为空，返回，否则交换左右孩子指针；递归镜像节点的左子树，右子树；
2：非递归：交换每一非叶子节点的左子树指针和右子树指针 ，利用队列，根节点先入队；交换队列第一个节点的左右孩子之针，
然后把第一个节点的左右孩子入队，然后pop();直到队列为空；即遍历完毕；
递归实现：public void mirror() {
mirror(this.root);
}
/**
 * 求B...]]></description><category></category></item><item><title><![CDATA[java-二叉树的四种遍历的递归与非递归实现]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/96466397</link><guid>https://blog.csdn.net/Ucsasuke/article/details/96466397</guid><author>Ucsasuke</author><pubDate>Thu, 18 Jul 2019 23:21:46 +0800</pubDate><description><![CDATA[首先我们需要了解二叉树的基本性质：
1.每一个节点最多有两个孩子节点
2.左孩子&lt;根节点&lt;右孩子
四种遍历思路：
前序遍历：根结点 —&gt; 左子树 —&gt; 右子树
中序遍历：左子树—&gt; 根结点 —&gt; 右子树
后序遍历：左子树 —&gt; 右子树 —&gt; 根结点
层次遍历：仅仅需按层次遍历就可以义目录标题)

而刚好由于这种性质，我们利用递归可以很简单的完成遍历
...]]></description><category></category></item><item><title><![CDATA[java-输入一个单向链表，输出该链表中倒数第k个结点]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/96381643</link><guid>https://blog.csdn.net/Ucsasuke/article/details/96381643</guid><author>Ucsasuke</author><pubDate>Wed, 17 Jul 2019 23:30:57 +0800</pubDate><description><![CDATA[输入一个单向链表，输出该链表中倒数第k个结点。

思路一：首先我们可以想到的是遍历完整个链表然后从尾部回溯k个节点就能找到，但是单向链表不能从尾部向前遍历。这时，我们就可以想到先遍历一遍计算出总共的结点个数count，然后再从头部开始遍历到count-k，就能取到倒数第k个结点了。这个方法之间复杂度虽然为O（n），但是遍历了两次链表，对于结点个数不多的链表来说适用，但是数据量太大的话就比较影响效率...]]></description><category></category></item><item><title><![CDATA[java-给一个数组，实现奇数在前，偶数在后的排序三种解法]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/96192857</link><guid>https://blog.csdn.net/Ucsasuke/article/details/96192857</guid><author>Ucsasuke</author><pubDate>Tue, 16 Jul 2019 23:23:40 +0800</pubDate><description><![CDATA[输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有的奇数位于数组的前半部分，所有的偶数位于位于数组的后半部分，并保证奇数和奇数，偶数和偶数之间的相对位置不变。


思路一：从前向后找，找到一个数如果是偶数，就把这个数取出放到数组尾部，这个会产生数据的移动。时间复杂度也比较高，为O（n^2）。效率太低。

思路二：申请两个大小相等的数组，然后将奇数放在第一个数组中，偶数放在第二个数组...]]></description><category></category></item><item><title><![CDATA[java-倒序打印链表与逆置单链表]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/96033458</link><guid>https://blog.csdn.net/Ucsasuke/article/details/96033458</guid><author>Ucsasuke</author><pubDate>Mon, 15 Jul 2019 23:06:09 +0800</pubDate><description><![CDATA[我们的链表有很多，单链表，双向链表，环链表等。这里是最普通的单链表模式，我们一般会在数据存储区域存放数据，然后有一个指针指向下一个结点。虽然 Java 中没有指针这个概念，但 Java 的引用恰如其分的填补了这个问题，也可以叫做地址域。

思路：倒序打印我们首先能想到的是，因为链表具有next这个地址域指向下一个节点，所以正序利用循环可以很好的输出链表，然后可以将它们存储到一个数组中，这样在倒序遍...]]></description><category></category></item><item><title><![CDATA[java-利用前序和中序遍历重建二叉树]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/96021415</link><guid>https://blog.csdn.net/Ucsasuke/article/details/96021415</guid><author>Ucsasuke</author><pubDate>Mon, 15 Jul 2019 21:34:37 +0800</pubDate><description><![CDATA[如果只给出一个二叉树的前序遍历和中序遍历怎么重建起一个二叉树呢？

在剑指offer上给出这个题目，前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}。

思路：先来分析一下前序遍历和中序遍历得到的结果，

前序遍历第一位是根节点；
中序遍历中，根节点左边的是根节点的左子树，右边是根节点的右子树。

首先，根节点 是{ 1 }；
左子树是：前序{ 2,4...]]></description><category></category></item><item><title><![CDATA[java-青蛙跳台阶]]></title><link>https://blog.csdn.net/Ucsasuke/article/details/95936398</link><guid>https://blog.csdn.net/Ucsasuke/article/details/95936398</guid><author>Ucsasuke</author><pubDate>Sun, 14 Jul 2019 23:16:23 +0800</pubDate><description><![CDATA[第一种：一只青蛙一次可以跳上 1 级台阶，也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。

第二种：一只青蛙一次可以跳上1级台阶，也可以跳上2 级……它也可以跳上n 级，此时该青蛙跳上一个n级的台阶总共有多少种跳法？

思路一：当n=1时，只有一种

 当n=2时，有两种

 当n=3时，有三种

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