<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[DoWhatIWant_comeon的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; DoWhatIWant_comeon]]></copyright><item><title><![CDATA[（no.23) Find the Duplicate Number 多种方法探讨]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/74535774</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/74535774</guid><author>DoWhatIWant_comeon</author><pubDate>Thu, 06 Jul 2017 13:09:31 +0800</pubDate><description><![CDATA[题目描述 分析实现 法一 
若不考虑空间复杂度必须为O（1）的条件，在满足1、3、4的条件下，对于找寻重复的数字来说，很简便的一种方法就是映射。将元素值作为新开数组的下标，进行出现次数的统计。
class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int len=nums.size()+1;]]></description><category></category></item><item><title><![CDATA[Word Break]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/74531974</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/74531974</guid><author>DoWhatIWant_comeon</author><pubDate>Thu, 06 Jul 2017 12:03:41 +0800</pubDate><description><![CDATA[题目描述 
 
待实现的函数接口的形参类型， 
bool wordBreak(string s, vector& wordDict) { 
… 
}
分析 
该题使用动态规划的思想能很快解决。我们需要明确以下几点， 
1、只要能找到至少一种分割方法就可以返回true 
2、找寻策略：将s从头开始，每次添加一个字符进行分割，看分割前后的两部分是否正好在字典里有。而分割前后的两部分的找寻策略同上。
代码]]></description><category></category></item><item><title><![CDATA[最长公共子序列问题 细节注意]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/74279149</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/74279149</guid><author>DoWhatIWant_comeon</author><pubDate>Tue, 04 Jul 2017 00:44:06 +0800</pubDate><description><![CDATA[题目描述 
求两个子串的公共最长子序列（LCS）的长度。
分析 
该题是一道非常经典的动态规划题目。需要注意一些细节，不要阴沟里翻船（下文会提到）
代码实现 
我们可以得到如下的递归式， 
若i=0或者j=0，c[i,j]=0; 
若i，j>0并且xi=yj，c[i][j]=c[i-1][j-1]+1; 
若i，j>0并且xi≠yj，c[i][j]=max(c[i][j-1],c[i-1][j]);]]></description><category></category></item><item><title><![CDATA[算法证明题 8.9 HITTING SET]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/74276431</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/74276431</guid><author>DoWhatIWant_comeon</author><pubDate>Mon, 03 Jul 2017 21:45:30 +0800</pubDate><description><![CDATA[题目描述 
In the HITTING SET problem,we are given a family of sets{S1,S2,…,Sn} and a budget b,and we wish to find a set H of size<=b which intersects every Si, if such an H exists.In other words, we want H]]></description><category></category></item><item><title><![CDATA[算法机考模拟题 part2]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/73861232</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/73861232</guid><author>DoWhatIWant_comeon</author><pubDate>Wed, 28 Jun 2017 18:19:02 +0800</pubDate><description><![CDATA[4 相连的1 题目描述  对于一个01矩阵A，求其中有多少片连成一片的1. 每个1可以和上下左右的1相连. 
   请为下面的Solution类实现解决这一问题的函数countConnectedOnes，函数参数A为给出的01矩阵，A的行数和列数均不大于1000. 函数的返回值是问题的答案. 
  例1： 
  A= 
  100 
  010 
  001 
  答案为3. 
   例2：]]></description><category></category></item><item><title><![CDATA[算法机考模拟题 part1]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/73857014</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/73857014</guid><author>DoWhatIWant_comeon</author><pubDate>Wed, 28 Jun 2017 18:00:26 +0800</pubDate><description><![CDATA[-1 函数求值  题目描述
  定义超级和函数F如下： 
  F(0, n) = n，对于所有的正整数n.. 
  F(k, n) = F(k – 1, 1) + F(k – 1, 2) + … + F(k – 1, n)，对于所有的正整数k和n. 
  请实现下面Solution类中计算F(k, n)的函数（1 <= k, n <= 14）. 
  class Solution { 
  publ]]></description><category></category></item><item><title><![CDATA[Compare Version Numbers字符串的应用+小技巧]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/73251995</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/73251995</guid><author>DoWhatIWant_comeon</author><pubDate>Wed, 14 Jun 2017 20:35:32 +0800</pubDate><description><![CDATA[题目描述 
leetcode 中等难度题  “165. Compare Version Numbers” 评价 
该题的题目描述的例子举得不是很好，会产生误导（至少我一开始就理解错题目了）。应该举如下的例子，“1.0.1”>”1”, “3.4.5.6”<”3.4.5.7”等，即点”.”不止只会出现一次。
分析 
在真正理解题目后，问题就变得简单了。我们可以把该问题转化为循环判断两部分的大小，直到能比]]></description><category></category></item><item><title><![CDATA[Minimum Time Difference不复杂]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/73251481</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/73251481</guid><author>DoWhatIWant_comeon</author><pubDate>Wed, 14 Jun 2017 19:30:53 +0800</pubDate><description><![CDATA[题目描述 
leecode medium题 “539. Minimum Time Difference” 分析 
别看该题是中等难度的题，只要缕清思路，就很简单，代码也很容易写。如题所述，我们要找最小的时间差。最暴力的一种方法就是让所给出的时间自由组合计算出各个的时间差，取最小的。但我们并没有必要计算出所有组合的，因为有些时间的组合我们是可以直接排除的。怎么排除？拿[00：20，12：45，20：1]]></description><category></category></item><item><title><![CDATA[Divide Two Integers不使用乘除法来计算两个数相除]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/72860799</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/72860799</guid><author>DoWhatIWant_comeon</author><pubDate>Sun, 04 Jun 2017 19:22:15 +0800</pubDate><description><![CDATA[题目描述 分析 
不使用乘除法来计算两个数相除，那就从除法的定义出发：商表示的是被除数里包含了多少个除数。那最直接的一种办法，就是循环减除数，累加次数，直到不能再减。这么粗暴的办法，很容易会超时，举个极端的例子，若被除数是INT_MAX即2147483647，除数是1，那么就得减2147483647次，程序才能运行结束。所以，我们应该每次减多一点，我第一想到的便是位操作。因为，位操作可以看成是特殊的]]></description><category></category></item><item><title><![CDATA[计算一棵完整二叉树的结点数  C实现]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/72848877</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/72848877</guid><author>DoWhatIWant_comeon</author><pubDate>Sat, 03 Jun 2017 00:20:23 +0800</pubDate><description><![CDATA[题目描述 分析 
学过图论的我们知道，一棵层数为h的完整二叉树的最大节点数为2^h-1（节点的层数：从根开始定义起，根为第1层，根的子节点为第2层…）。那么问题来了，若结点范围是在2^(h-1)和2^h之间，怎么算呢？一种很直接的方法便是等于左子树的结点数+右子树的节点数+1。至此，我们就大概知道代码怎么写了。如果刚好是满二叉树，那么节点数便是2^h-1;如果不是，那么就左子树、右子树的结点数分别加]]></description><category></category></item><item><title><![CDATA[Split Array Largest Sum 二分查找应用 C实现]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/72561303</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/72561303</guid><author>DoWhatIWant_comeon</author><pubDate>Fri, 19 May 2017 20:31:37 +0800</pubDate><description><![CDATA[题目描述 初步分析 
该题乍一看没有什么思路，于是我便直接思考用二分查找怎么做（因为该题是在二分查找分类下的）。那对什么东西来应用二分查找呢？ 
1、是对在m个子串的条件下，来找寻（m-1）个cut的位置上应用二分查找吗？如果是那样的话，二分查找的起始边界是什么，跳出查找的循环条件又是什么？显然这两个问题是很难具体确认的，我们应该再想想其他的。 
2、本题最终需返回的是最小子串划分方法的最大子串值（]]></description><category></category></item><item><title><![CDATA[c 等差数列应用arranging coins 多种实现方法]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/71774650</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/71774650</guid><author>DoWhatIWant_comeon</author><pubDate>Sat, 13 May 2017 01:53:59 +0800</pubDate><description><![CDATA[题目描述 
 分析（实现方法1） 
由题知每行（第1行、第2行…)coin的变化是1，2，3，4，5…..，即等差数列。若第k行刚好填满，则所有的coins数为Sk= k(k+1)/2。假设令2*Sk=m*m，则k(k+1)=m*m，可得m*m>k*k。也即k势必会比2*Sk开方的值小，但不会小太多。对于输入n，那么我们可以从m（m=sqrt(2*n)）开始验算，看其附近有没有满足k（k+1）=2*]]></description><category></category></item><item><title><![CDATA[c实现double myPow(double x, int n)的细节讨论]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/71443013</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/71443013</guid><author>DoWhatIWant_comeon</author><pubDate>Tue, 09 May 2017 12:33:42 +0800</pubDate><description><![CDATA[题目要求 分析 
最暴力的办法便是，挨个乘起来。该种做法耗时且浪费了可重复利用的资源。何为可重复利用的资源？举个例子，x^8=(x^2)^2^2, 再如x^5=(x^2)^2 * x。也即可以利用二分查找的思想，将累乘对半、对半、再对半划分，只需算一半便可得出结果，如下图所示。 
 
上图是pow(x,10)的例子，x^10=((x^2)^2*x)^2
代码实现
double cal(double]]></description><category></category></item><item><title><![CDATA[c 实现int sqrt（int x）函数的细节讨论]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/71439316</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/71439316</guid><author>DoWhatIWant_comeon</author><pubDate>Tue, 09 May 2017 09:53:03 +0800</pubDate><description><![CDATA[题目描述 分析 
注意该函数返回的数据类型，是int。那么我们应用二分查找即可实现。
细节讨论 
于是我便写了如下所示的代码，然而运行超时了。
int mySqrt(int x) {
    int low=0;
    int high=x;
    int mid,product;
    while(low<=high){
        mid=(low+high)/2;
        p]]></description><category></category></item><item><title><![CDATA[C语言实现 求两个数组的交集]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/70306766</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/70306766</guid><author>DoWhatIWant_comeon</author><pubDate>Thu, 20 Apr 2017 23:49:29 +0800</pubDate><description><![CDATA[题目描述 分析 
其中一种逻辑比较清晰的方法就是分别对两个数组进行排序，再应用二路归并排序的思想来找出交集。下面是实现的代码，其中采用的排序方法是选择排序。
代码实现
void SelectSort(int *nums,int numsSize){
   int min,temp;
   for(int i=0;i<numsSize-1;i++){
        min=i;
        fo]]></description><category></category></item><item><title><![CDATA[c 求字符串内无重复字符的最长子串]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/70220210</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/70220210</guid><author>DoWhatIWant_comeon</author><pubDate>Tue, 18 Apr 2017 00:56:03 +0800</pubDate><description><![CDATA[题目描述 分析 
根据题意，最直接暴力的一种方法就是把所有子串都遍历一遍，选出没有重复字符且最长的子串即为结果。注意，本题只需要输出最长子串的长度即可，无需内容。
初版代码
int lengthOfLongestSubstring(char* s) {
    int len=strlen(s);
    int count=0;
    bool isOk=true;
    char *temp]]></description><category></category></item><item><title><![CDATA[C 判断字符串是否是子集]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/70042140</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/70042140</guid><author>DoWhatIWant_comeon</author><pubDate>Tue, 11 Apr 2017 01:01:41 +0800</pubDate><description><![CDATA[题目描述 分析 
该题是在leetCode“二分搜索”类下搜到的一题难度为medium的题。从题目的意思来看，其实就是判断子串的字符顺序是否在主串中出现过，若出现过，就返回true。就题目的意思来说，那我们最多遍历一次主串来挨个搜寻出子串的字符即可得出结果，很简单明了的一件事儿。之所以说是medium，是从若用运用二分搜索的思想来解该题的角度说的吧，而我到在写下这篇博客为止，还未能想到如何应用二分搜]]></description><category></category></item><item><title><![CDATA[C 在行有序的矩阵中找出第k大的元素]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/70040460</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/70040460</guid><author>DoWhatIWant_comeon</author><pubDate>Tue, 11 Apr 2017 00:06:14 +0800</pubDate><description><![CDATA[题目描述 分析 
初看这道题，找出第k大的元素，一个简单直接的方法就是排序。因为矩阵的每行都是有序的，可以考虑归并排序。这是一种解题思路，有没有其他方法呢？ 
有,应用二分搜索。我们换个角度来思考这个问题，把问题想象成找出一组数的第k大元素。那我可以对半（随机）找（猜）哇，先来一个值，看小于这个值的数有多少，不够（k-1)的话，那这个值就是设小了，我们放大一点（怎么放大？应用二分搜索的思想）重新数数]]></description><category></category></item><item><title><![CDATA[Insert Interval区间插入题型求解  C实现]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/66480691</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/66480691</guid><author>DoWhatIWant_comeon</author><pubDate>Sun, 26 Mar 2017 21:30:17 +0800</pubDate><description><![CDATA[题目描述 分析 
该题并不像其标签‘difficult’一样的难，其实就是一个对集合（区间）取并集的操作。 
插入了一个新区间来取并集，关键就在于判断出原区间集中受新区间的覆盖影响情况以及确切的起始结束位置，剩下的区间照搬即可。
代码 
编程的思路请留意注释的内容。
/**
 * Definition for an interval.
 * struct Interval {
 *     int]]></description><category></category></item><item><title><![CDATA[判断二叉树是否为平衡树]]></title><link>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/63684570</link><guid>https://blog.youkuaiyun.com/DoWhatIWant_comeon/article/details/63684570</guid><author>DoWhatIWant_comeon</author><pubDate>Sun, 19 Mar 2017 14:41:04 +0800</pubDate><description><![CDATA[题目 分析 
判断二叉树是否为平衡树的关键就是每个节点的左右节点的树高差不超过1，也即对一个节点，其| leftHeight-rightHeight |<=1且其左节点和右节点也满足上述情况，以此类推。清楚了这一点后，代码就很容易写出来了。判断条件为若你存在有某节点的左右树高差大于1的，那么便不是二叉树；若你遍历了所有节点，都符合不大于1的条件，那么就是二叉树。而说到遍历，联系上述内容，我们就很容易]]></description><category></category></item></channel></rss>