<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[G7S9R的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/G7S9R</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; G7S9R]]></copyright><item><title><![CDATA[数据库基础知识]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79380282</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79380282</guid><author>G7S9R</author><pubDate>Mon, 26 Feb 2018 18:56:11 +0800</pubDate><description><![CDATA[大数据的三大相关性：容量：交易、记录、大量的数据速度：实时、成批次处理、流动变量：结构化、非结构化、半结构化一个好的数据库系统需要满足以下两点要求：合理的组织数据。高效的进行数据查询。现代的数据库系统的变化：需要存储更多的非结构化数据。更为高效的存储和读取数据。数据的定义：可被存储的，有特定意义的，描述对象特征的记录。数据库的定义：相关联的数据的集合。单独的数据是没有任何意义的。数据库可以被数据库...]]></description><category></category></item><item><title><![CDATA[最长的可整合的子数组的长度]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79328212</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79328212</guid><author>G7S9R</author><pubDate>Thu, 15 Feb 2018 14:52:22 +0800</pubDate><description><![CDATA[题目：先给出可整合数组的定义。如果一个数组在排序后，每相邻的两个数差的绝对值都为1，则该数组为可整合数组。例如，[5,3,4,6,2]排序之后为[2,3,4,5,6]，符合每相邻的两个数差的绝对值为1，所以这个数组为可整合数组。给定一个整形数组arr，请返回其中最大的可整合数组的长度。例如，[5,5,3,2,6,4,3]的最大可整合数组为[5,3,2,6,4]，所以返回5.思路：最大整合数组有一个...]]></description><category></category></item><item><title><![CDATA[将正方形矩阵顺时针转动90度]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79290626</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79290626</guid><author>G7S9R</author><pubDate>Thu, 08 Feb 2018 16:04:59 +0800</pubDate><description><![CDATA[题目：给定一个NxN的矩阵matrix，把这个矩阵调整成顺时针转动90度后的形式。例如：1  2    3   45  6    7   89  10  11  1213 14 15  16顺时针转动90度13  9   5   114  10  6  215  11  7  316  12  8  4思路：此题可以采用分解矩阵的思路解决。首先是矩阵的外围即：1   2  3   45      ...]]></description><category></category></item><item><title><![CDATA[在其它数都出现k次的数组中找到只出现一次的数]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79282264</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79282264</guid><author>G7S9R</author><pubDate>Wed, 07 Feb 2018 17:21:22 +0800</pubDate><description><![CDATA[题目：
给定一个整形数组arr和一个大于1的整数k。已知arr中只有1个数出现了1次，其他的数都出现了k次，请返回只出现1次的数。
思路：
根据该题的数组中很多数出现了k次只有一个数出现了1次。可以采用如下的步骤解决此题。


将数组中所有的数都转换为k进制的形式。所有的数依次相加取余。最终的结果为只出现一次的数。
为何将所有的数相加并取余后得到的结果就是只出现1次的书。设x为出现了]]></description><category></category></item><item><title><![CDATA[在其他数都出现偶数次的数组中找到出现奇数次的数]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79272680</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79272680</guid><author>G7S9R</author><pubDate>Tue, 06 Feb 2018 17:41:45 +0800</pubDate><description><![CDATA[题目：
给定一个整形数组arr，其中只有一个数出现了奇数次，其他数都出现了偶数次，打印这个数。要求时间复杂度为O（n），额外空间复杂度为O（1）。
思路：
此题可以采用异或的思想解决。异或满足交换律。
假设有一个数组arr = {4,6,3,2,4,3,6,6,6}
4⊕6⊕3⊕2⊕4⊕3⊕6⊕6⊕6
 = 4⊕4⊕3⊕3⊕6⊕6⊕6⊕6⊕2


众所周知同样的数异或之后为0，不]]></description><category></category></item><item><title><![CDATA[整数的二进制表达中有多少个1]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79261481</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79261481</guid><author>G7S9R</author><pubDate>Mon, 05 Feb 2018 17:15:50 +0800</pubDate><description><![CDATA[题目：
给定一个32位的整数n，可为0，可为正，也可为负，返回该整数二进制表达中1的个数。
思路：
最简单的做法就是求出一个整数如何得到它的二进制数。以整数5为例。用5除以2，取余的结果为1时代表二进制表达中含有一个1，此时的被除数变为5/2。循环直到被除数为0，循环结束。
注意：负数的二进制表示的首位为1.在计数之前需要判断n的正负。
代码：
/**
     * 整数二进制中有多少]]></description><category></category></item><item><title><![CDATA[只用位运算不用算数运算求两个数的加减]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79254486</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79254486</guid><author>G7S9R</author><pubDate>Sun, 04 Feb 2018 20:45:15 +0800</pubDate><description><![CDATA[题目：
给定两个32位整数a和b，可正、可负、可0.不能使用算数运算符，分别实现a与b的加减运算。
思路：
两个数的相加实际上就是在二进制位上的抑或、与、移位等操作。两个数抑或表示两个数无进位的相加，两个数与再向左移动一位代表着两个数相加产生的进位。
以9+3为例：


代码：
/**
     * 不使用运算符号实现运算
     */
	public int addNoAlph]]></description><category></category></item><item><title><![CDATA[回文最少分割数]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79232988</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79232988</guid><author>G7S9R</author><pubDate>Thu, 01 Feb 2018 20:38:45 +0800</pubDate><description><![CDATA[题目：
给定一个字符串str,返回把str全部切割为回文子串的最小分割数。
思路：
该题可以使用动态规划的思想来解决。首先要明确好dp[i]的概念，即从str的首个位置开始到第i个位置要切割为回文子串的最小分割数。最后的dp[str.length()-1]就是题目的结果。
要求出dp[i]的值就需要遍历数组str（0~i），假设0~i之间的某个值j，char[j] == char[i]。在]]></description><category></category></item><item><title><![CDATA[翻转字符串]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79118219</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79118219</guid><author>G7S9R</author><pubDate>Sun, 21 Jan 2018 11:16:29 +0800</pubDate><description><![CDATA[题目：
给定一个字符类型的数组chas和一个整数size，请把大小为size的左半区整体移动到右半区，右半区整体移到左边。
举例：
如果把chas看做字符串“ABCDE”，size=3，调整成“DEABC”。
思路：
首先判断该字符串左右移动的距离，取最小的哪一个。举例“1234567ABCD”。需要移动的size是7.即将1234567移动到ABCD的右边变为“ABCD1234567”]]></description><category></category></item><item><title><![CDATA[判断字符数组中是否所有的字符都只出现过一次]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/79079077</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/79079077</guid><author>G7S9R</author><pubDate>Tue, 16 Jan 2018 20:57:09 +0800</pubDate><description><![CDATA[题目：给定一个字符类型的数组chas[]，判断chas中是否所有的字符都只出现过一次，请根据以下两种要求实现函数。
时间复杂度为O(N)。
额外空间复杂度为O(1)。
思路：遍历字符串时，每遍历一个字符的时候创建一个新的字符串使用replace函数将遍历到的字符替换为空字符在赋值给新建的字符。将原先的字符长度与新建的字符长度做减法，一旦大于或等于2则判断原字符中存在重复的字符。代码：   /**]]></description><category></category></item><item><title><![CDATA[Effective Java读书笔记-复合优先于继承]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78615274</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78615274</guid><author>G7S9R</author><pubDate>Thu, 23 Nov 2017 16:00:01 +0800</pubDate><description><![CDATA[继承是完成代码重用的有力手段，但它并非是完成这项工作的最佳工具。使用不当通常会导致软件非常的脆弱。在包的内部使用继承是非常安全的。对于普通的具体的类进行跨越包的边界的继承将是非常危险的。继承打破了封装性：与方法调用不同，继承打破了封装性。换句话说，子类依赖于超类中特定功能的实现细节。超类的实现有可能依赖发行版本的不同而有所变化，如果真的发生了变化，子类可能会遭到破坏，即使它的代码没有完全改变。因此子]]></description><category></category></item><item><title><![CDATA[Effective Java读书笔记-使可变性最小化]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78604229</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78604229</guid><author>G7S9R</author><pubDate>Wed, 22 Nov 2017 19:56:50 +0800</pubDate><description><![CDATA[存在不可变类的原因：不可变的类比可变的类更加易于设计、实现和使用。它们不容易出错且更加安全。使类变为不可变需要遵守的五项原则：
不要提供任何会修改对象状态的方法。
保证类不会被拓展。这样可以防止粗心或者恶意的子类假装对象的状态已经改变，从而破坏类的不可变行为。为了防止子类化，一般的做法是使类变为final的。
使所有的域都是final的。
使所有的域都变为私有的。
确保任何可变组件的互斥访问。如果类]]></description><category></category></item><item><title><![CDATA[最长公共子串问题]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78597060</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78597060</guid><author>G7S9R</author><pubDate>Tue, 21 Nov 2017 21:20:34 +0800</pubDate><description><![CDATA[题目：给定两个字符串str1和str2，返回两个字符串的最长公共子串。要求时间复杂度为O(M*N)，额外空间复杂度为O(1)的方法。思路：一开始想用KMP算法解决此题，但是众所周知KMp算法需要next数组，那么空间复杂度肯定是O(n)了。后来想到了递归的方法。刚好满足题目的要求。解题代码：public String theLongest(String str1,String str2){]]></description><category></category></item><item><title><![CDATA[最长公共子序列的问题]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78592664</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78592664</guid><author>G7S9R</author><pubDate>Tue, 21 Nov 2017 15:52:14 +0800</pubDate><description><![CDATA[题目：给定两个字符串str1和str2，返回两个字符串的最长公共子序列。 
举例str1=”1A2C3D4B56”，str=“B1D23CA45B6A”。123456或者12C4B6都是最长公共子序列，返回哪一个都行。思路：此题可以采用动态规划的思想来解。首先要构造一个矩阵Matrix[str1.length()][str2.length()]。以str1为行，str2为列。之后构造数组dp[str]]></description><category></category></item><item><title><![CDATA[Effective Java读书笔记-使类和成员的可访问性最小化]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78582474</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78582474</guid><author>G7S9R</author><pubDate>Mon, 20 Nov 2017 16:42:14 +0800</pubDate><description><![CDATA[区别设计良好的模块和设计不好的模块，最重要的因素在于，这个模块对于外部其它的模块而言，是否隐藏了内部的数据和其他实现的细节。设计良好的模块会隐藏所有的实现细节。设计良好的模块会隐藏所有的实现细节，把它的API与它的实现清晰的隔离开。然后，模块之间只通过API进行通信，一个模块不需要知道其它模块的内部工作情况。这个概念被称作信息隐藏或者封装，是软件设计的基本原则之一。Java程序设计语言提供了许多机制]]></description><category></category></item><item><title><![CDATA[汉诺塔问题进阶]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78571360</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78571360</guid><author>G7S9R</author><pubDate>Sat, 18 Nov 2017 21:26:37 +0800</pubDate><description><![CDATA[题目：给定一个整形数组arr，其中只含有1、2和3，代表所有圆盘目前的状态。1代表左柱，2代表中柱，3代表右柱，arr[i]代表第i+1个圆盘的位置。比如，arr=[3,3,2,1]，代表第一个盘子在右柱上，第二个盘子在右柱上，第三个圆盘在中柱上，第四个圆盘在左柱上。如果arr代表的状态是最优移动轨迹过程中出现的状态，返回arr这种状态是最优移动轨迹中的第几个状态。如果arr代表的状态不是最优移动轨]]></description><category></category></item><item><title><![CDATA[Effective Java读书笔记-考虑实现Comparable接口]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78569688</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78569688</guid><author>G7S9R</author><pubDate>Sat, 18 Nov 2017 18:06:13 +0800</pubDate><description><![CDATA[compareTo方法没有在Object中声明，相反它是Comparable接口的唯一方法。compareTo方法不单单可以进行简单的同性比较，而且允许执行顺序比较。类实现了Comparable接口就表明它的实例具有内在的排序关系（natural ordering）。实现Comparable接口的对象数组进行排序的操作很简单：Array.sort(a);一旦类实现了Comparable接口，它就可以]]></description><category></category></item><item><title><![CDATA[汉诺塔问题]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78565812</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78565812</guid><author>G7S9R</author><pubDate>Fri, 17 Nov 2017 22:25:14 +0800</pubDate><description><![CDATA[题目：给定一个整数n，代表汉诺塔游戏中从小到大放置的n个圆盘，假设开始时所有的圆盘都放在左边的柱子上，想按照汉诺塔游戏的要求把所有的圆盘都移到右边的柱子上。实现函数打印最有轨迹。思路：此题可以采用递归的思想来解决，首先设有三个柱子分别设为left,mid,right，另外有n个圆盘，现将1~n-1个圆盘从left移动到mid上，之后再将第n个圆盘从left上移动到right上，最后将mid上的1~n]]></description><category></category></item><item><title><![CDATA[Effective Java读书笔记-谨慎的覆盖clone]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78561581</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78561581</guid><author>G7S9R</author><pubDate>Fri, 17 Nov 2017 17:20:00 +0800</pubDate><description><![CDATA[Cloneable接口的目的是作为对象的一个mixin接口，表明这样的对象允许克隆（clone）。Object的clone方法是受保护的，如果不借助反射（reflection），就不能仅仅因为一个对象实现了Cloneable，就可以调用clone方法，即使是反射调用也可能会失败，因为不能保证该对象拥有可访问的clone方法。Cloneable的作用：它决定了Object中受保护的clone方法实现的]]></description><category></category></item><item><title><![CDATA[最长递增子序列]]></title><link>https://blog.youkuaiyun.com/G7S9R/article/details/78515078</link><guid>https://blog.youkuaiyun.com/G7S9R/article/details/78515078</guid><author>G7S9R</author><pubDate>Sun, 12 Nov 2017 21:00:46 +0800</pubDate><description><![CDATA[题目：给定数组arr，返回arr的最长递增子序列。 
举例： 
arr=[2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,9,8]。思路：采取两层循环来遍历数组arr，第一层循环遍历完一个数之后，在第二层循环中以第一层循环中的这个数为第一个数向左进行循环寻找比第一层循环中小的数，并取出这个数的长度并加一。这里需要用到一个判断公式：dp[i] = max(dp[i],dp[j]]></description><category></category></item></channel></rss>