<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[teaspring的技术专栏]]></title><description><![CDATA[思考，为了递归或者迭代]]></description><link>https://blog.youkuaiyun.com/teaspring</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; teaspring]]></copyright><item><title><![CDATA[[以太坊源代码分析] VI. 基于p2p的底层通信(上篇)]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/78455046</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/78455046</guid><author>teaspring</author><pubDate>Mon, 06 Nov 2017 10:20:24 +0800</pubDate><description><![CDATA[以太坊中客户端之间的底层通信天然适用p2p通信协议，本篇主要介绍了以太坊中有关p2p通信核心模块ProtocolManager的一些主要流程逻辑，以及p2p通信协议族的一些架构设计。]]></description><category></category></item><item><title><![CDATA[[以太坊源代码分析] IV. 椭圆曲线密码学和以太坊中的椭圆曲线数字签名算法应用]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/77834360</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/77834360</guid><author>teaspring</author><pubDate>Mon, 04 Sep 2017 10:39:24 +0800</pubDate><description><![CDATA[本文从椭圆曲线加密学的基础-点倍积开始讲起，完整介绍了椭圆曲线数字签名算法的理论基础和实现算法，以及以太坊中是如何调用椭圆曲线数字签名算法进行数字签名操作的。]]></description><category></category></item><item><title><![CDATA[[Bluetooth]: android 平台上BLE连接流程之优化方案]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/77200688</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/77200688</guid><author>teaspring</author><pubDate>Wed, 16 Aug 2017 00:08:52 +0800</pubDate><description><![CDATA[文章提供了一种设计良好的蓝牙连接(重连)的流程逻辑，可以极大的提高Android平台上蓝牙设备的连接成功率。]]></description><category></category></item><item><title><![CDATA[一款轻量级的项目管理工具Redmine]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/45039141</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/45039141</guid><author>teaspring</author><pubDate>Tue, 14 Apr 2015 16:53:23 +0800</pubDate><description><![CDATA[介绍了在Ubuntu系统如何安装一款轻量级项目管理软件Redmine]]></description><category></category></item><item><title><![CDATA[[oj.leetcode] 跟leecode的博客旧文说再见]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/45011629</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/45011629</guid><author>teaspring</author><pubDate>Sun, 12 Apr 2015 21:48:34 +0800</pubDate><description><![CDATA[在我目前的博客中，数量最多的就是leecode问题的解答。这些归在leetcode标签之下的文章，其中的绝大部分，基本就是简单一说思路，然后贴代码。
比如这种


它们的共同特征就是结构较简单，讲解也不多，贴的代码行数能占整个篇幅的七八成。这种文章写起来很快，leecode标签下最多时候有45篇。
虽然这样以来，博客的文章数上升很快，但不客气地说，这有“注水”的嫌疑，已经背离了我建设这个]]></description><category></category></item><item><title><![CDATA[用opencv创建一个图片搜索引擎的几点改进]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/44937551</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/44937551</guid><author>teaspring</author><pubDate>Wed, 08 Apr 2015 14:54:59 +0800</pubDate><description><![CDATA[在《用Python和OpenCV创建一个图片搜索引擎的完整指南》介绍的python代码实现基础上，本文针对C++的代码实现，提出了几点改进，以便提高搜索精度。]]></description><category></category></item><item><title><![CDATA[[oj.leetcode] #174 - Dungeon Game 一次特别的DP之旅]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/43876929</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/43876929</guid><author>teaspring</author><pubDate>Thu, 19 Feb 2015 02:21:26 +0800</pubDate><description><![CDATA[原题篇幅挺长，关于一个2D关卡游戏，这里就不赘述了。这里以矩阵的方式陈述一下。
在一个二维数组M*N中, 有一个王子需要从起点[0][0]出发，移动到终点[m-1][n-1]，每次移动一格，方向只能向右或者向下。出发前，王子的(健康)值至少为1。矩阵中每一格有一整型值，可正可负可0，对于经过的王子，会把这值加到他身上。规则是王子在移动过程中(包括到达终点)，无论何时他身上的值都不能小于1。问王子]]></description><category></category></item><item><title><![CDATA[[oj.leetcode] #179 - LargestNumber, 如何在7ms内跑完 221个测试用例]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/43614773</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/43614773</guid><author>teaspring</author><pubDate>Sun, 08 Feb 2015 00:01:21 +0800</pubDate><description><![CDATA[题目：已知一个整型数组，如何排列使得最后组成一个最大整数，输出这个整数的字符串，假设都是非负。
比如[3, 30, 34, 5, 9], 结果应该是 9534330


这里选用C++。

第一感觉应该是跟排序相关，稳妥方案是快速排序quick sort. 每两个数之间比较时，应从最高位开始，一位一位进行比较，将某一位更大的数排在前面。当然需要考虑当一个数是另一个数前缀时的情况，之后再]]></description><category></category></item><item><title><![CDATA[Python中yield的使用小述]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/38733687</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/38733687</guid><author>teaspring</author><pubDate>Thu, 21 Aug 2014 22:56:16 +0800</pubDate><description><![CDATA[Python中yield恐怕是最迷人的特性之一了，不过要想理解]]></description><category></category></item><item><title><![CDATA[[Android] - 如何写Instrumentation UT Manifest.xml]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/38078405</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/38078405</guid><author>teaspring</author><pubDate>Thu, 24 Jul 2014 10:25:09 +0800</pubDate><description><![CDATA[<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.settings.tests">
    
    

    
        
        <activity android:name="BluetoothRequestPermissionTest"
]]></description><category></category></item><item><title><![CDATA[递归一题三解－将二分查找树(BST)转化成循环双链表(DLL)]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/17756343</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/17756343</guid><author>teaspring</author><pubDate>Fri, 03 Jan 2014 12:09:13 +0800</pubDate><description><![CDATA[题目来自leetcode: 已知一个BST(binary search tree), 将其原地转化成一个循环的排序过的双链表(circular sorted double linked list)。
说明：BST的节点有两个指针left, right, 分别指向比它小，和比它大的节点。变成DLL之后，由于DLL节点原本有prev 和 next 指针分别和之前和之后的节点，这里假定原left指针指]]></description><category></category></item><item><title><![CDATA[线性查找－股票最佳收益]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/17732739</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/17732739</guid><author>teaspring</author><pubDate>Thu, 02 Jan 2014 10:57:48 +0800</pubDate><description><![CDATA[best buy and sell stock
problem 1: permitted only once buy and sell
problem 2: no limit of counts of buy and sell]]></description><category></category></item><item><title><![CDATA[线性查找－数组最大距离]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/17732707</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/17732707</guid><author>teaspring</author><pubDate>Thu, 02 Jan 2014 10:11:24 +0800</pubDate><description><![CDATA[int A[n], find maximum j-i subjected to constraint of A[i]]]></description><category></category></item><item><title><![CDATA[复制数据结构 - 单链表及图]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/17469557</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/17469557</guid><author>teaspring</author><pubDate>Mon, 23 Dec 2013 15:07:55 +0800</pubDate><description><![CDATA[这次依然是两道算法题，复制链表，以及复制图，最后会给出一些总结。
题目一，复制一个单链表(SLL - single linked list), 其节点除了一个基本的后向指针(next), 还有一个指向链表中任意一个节点的随机指针(random)。
struct ranSLLNode{
    char* cValue;
    ranSLLNode* pNext;
    ranSLLNode]]></description><category></category></item><item><title><![CDATA[判断回文整型数]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/17324209</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/17324209</guid><author>teaspring</author><pubDate>Sat, 14 Dec 2013 21:24:10 +0800</pubDate><description><![CDATA[题目来自leetcode, 要求判断一个整型数是否是回文，不使用任何额外空间。
我承认，是“不使用额外空间”这句话让我想到了递归。
一般判断回文字符串是一个一个字符单独比较，但是对于整型数，显然我们有更好的办法。将它从低位到高位颠倒顺序重新排列，如果跟原数一样，那就成了。
bool ispalindrome(int n, int x, int m){
    if(n)
      ret]]></description><category></category></item><item><title><![CDATA[网页前端持续集成(2) - qunit+JSCoverage+PhantomJS使用小记]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/17266247</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/17266247</guid><author>teaspring</author><pubDate>Thu, 12 Dec 2013 23:42:43 +0800</pubDate><description><![CDATA[今年早些时候为公司项目做过一些网页前端程序的持续集成(CI)，在过去的几个月中不断地给不同的人讲解过之后，我决定开一篇介绍一下。
公司项目是一个ASP.net的网站，其中核心是一些JavaScript 的框架库以及扩展函数。基本目标是在Jenkins上集成单元测试（Unit Test）, 和代码覆盖率的统计。由于是前端程序，所以我们采用qunit来做单元测试，代码覆盖率使用JSCoverage(]]></description><category></category></item><item><title><![CDATA[二分查找-两已排序数组中找中位数二题]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/17260081</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/17260081</guid><author>teaspring</author><pubDate>Wed, 11 Dec 2013 14:39:12 +0800</pubDate><description><![CDATA[第一题来自于《算法导论》第九章习题 9.3-8. 已知两个已排序数组X[n], Y[n]（假设升序），问在时间O(lgn)内找到全部2n个数中的中位数。
给了提示时间O(lgn)，那么必定使用二分查找。这道题的“梗”在于如何处理两个已排序数组。我们有总共2n个数，偶数，那么全局的中位数来自于两个数a,b，在排好序的2n个数中，它们以上（比它们大）和以下（比它们小）应该各有n-1个数。令a > b]]></description><category></category></item><item><title><![CDATA[动态规划-有向无回路图中两点间最远距离]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/17244039</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/17244039</guid><author>teaspring</author><pubDate>Tue, 10 Dec 2013 17:34:32 +0800</pubDate><description><![CDATA[题目来源于《算法导论》第15章动态规划的习题 15-1。说实话它困扰了我很久，直到最近才想明白其中道理。
以前对最小距离作的比较多，比如对非负权值图中有Dijkstra算法，对负权值图中有Ford算法。  最远距离？？？假设从A到F的最远距离为A->C->D->E->F, 为什么D->E->F一定会是从D到F的最远距离？
当重新审视有向(directed) 无回路(acyclic)这两个词时，]]></description><category></category></item><item><title><![CDATA[动态规划-字符串处理二题]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/17053625</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/17053625</guid><author>teaspring</author><pubDate>Tue, 10 Dec 2013 14:21:27 +0800</pubDate><description><![CDATA[题目来自微信帐号“待字闺中”，10月15。给一个字母组成的字符串，问最少插入多少字符，变成回文串。
这题估计着可以用动态规划解，不过乍看上去，不知如何下手。第一个“梗”在于如何处理“最少插入字符”，根据最少即最多的思路，如果已知给定字符串中存在的离散回文字符串长度，剩下长度就是最少插入字符。

OK，有思路了，动态规划找到回文字符串，需要一个最优子结构转化式。用dp[i][i+j-1] 表示]]></description><category></category></item><item><title><![CDATA[两有序数组两两之和的最小k个值， 最小堆解法之完整版]]></title><link>https://blog.youkuaiyun.com/teaspring/article/details/16974139</link><guid>https://blog.youkuaiyun.com/teaspring/article/details/16974139</guid><author>teaspring</author><pubDate>Tue, 26 Nov 2013 23:43:42 +0800</pubDate><description><![CDATA[原题： 给定两有序数组，长度都是n，在总共n^2个两两之和中，找到最小的k个值。
题目不新鲜，出现了也有很多年了，不过在目前的面试中还有使用。较好的方法显然是用最小堆，时间复杂度降到 O(klgk)不过网上大略搜了一下，没有找到完整实现，甚至连关键点都没提到，我就这里算是个补充吧。
用最小堆，元素是 A[i] + B[j]. 每次弹出堆顶，然后插入新元素，维护最小堆。这里的关键在于每次插入哪些]]></description><category></category></item></channel></rss>