自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

binling的专栏

主要是备忘性质的笔记和零言碎语

  • 博客(22)
  • 收藏
  • 关注

原创 算法正确性证明三要素

1)invariant property 是什么,每步循环保证了invariant property。2)证明循环可以退出:(比如,在循环体的每个分支,循环的界都是在收敛)3)根据循环退出的condition和 invariant property 得出answer。

2014-12-30 12:43:46 4463

原创 Find Minimum in Rotated Sorted Array II

算法正确性证明的三要素1)invariant property 是什么,每步循环保证了invariant property2)证明循环可以退出:(比如,在循环体的每个分支,循环的界都是在收敛)3)根据循环退出的condition和 invariant property 得出answer/* invariant property: the min is within

2014-12-30 12:36:43 439

原创 链表基本操作

1 reverse1) 常规顺序遍历算法:(4句话)auto next = cur->next;cur->next = head2;head2 = cur;cur = next;2)递归算法:保存第二个结点地址second,reverse从第二个结点开始的链表,这时候second是reverse之后的链表的尾,令second->next = head, head =

2014-12-29 18:39:52 412

原创 Convert Sorted List to Binary Search Tree

方案1:找中间结点作为root + recursively 建立左右子树1)快慢指针法找中间结点mid,作为root,2) recursive problem: head 到 prev 这一段链表建立左子树, mid->next 到结尾这一段链表建立右子树复杂度分析:T(n) = 2T(n/2) + n/2 应该是 (n/2) * lgnTreeNode *sortedLis

2014-12-29 16:52:21 579

原创 Spiral Matrix II

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.For example, Given n = 3,You should return the following matrix:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7,

2014-12-29 16:14:12 436

原创 Spiral Matrix

Given a matrix ofmn elements (mrows, n columns), return all elements of the matrix in spiral order.For example, Given the following matrix:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]You shoul

2014-12-29 15:11:54 398

原创 二叉树 level order 遍历问题汇总

一 如何确定层结束?1 维护一个levelEnd,如果当前结点是level end,更新levelEnd 为queue.back(),注意先判断queue是否empty,(最后一层结束后,queue就空了)。2 维护一个curLevelNum 和 一个nextLevelNum,当curLevelNum count down 到0时候,交替3 遍历完一层的时候,队列里的元素就是下一层的所

2014-12-26 16:29:49 1657

原创 最大公约数,最小公倍数,素数等问题

两个数的 最小公倍数 等于两个数的乘积除以最大公约数,scm (a, b) = a * b / gcd (a, b),所以主要是最大公约数gcd 问题:辗转相除法依据就是欧几里得定理: gcd(a, b) = gcd(b, a%b)def gcd (a, b): while b > 0: c = a % b a, b = b, c re

2014-12-24 13:58:48 608

原创 组合数学几种“数”

1 卡塔兰数:以k为轴划分子问题,左边子问题的解的个数和右边子问题的解的个数是原问题以k为轴的解法的2个独立步骤,适用乘法原理;分别以1,2,。。。n为轴,是原问题的n种解法,适用加法原理。f(n) = f(0)f(n-1) + f(1)f(n-2) + ... + f(n-1)f(0)      = f(k-1)f(n-k) k=1...n2. 错排公式:

2014-12-23 18:36:45 891

原创 寻找数组中丢失的、者重复的、或者出现一次的的数的问题汇总

1. 集合增量问题一组大小为1到n的牌,抽走一张,求抽走的是哪张牌?此类问题特点:输入:1)已知原始集合:或者是直接给定一个数组,或者是给一个描述,比如1到n,每个数出现一次(或2次),总之原始集合是确定的2)改变后的集合:原始集合拿走(添加)一个或2个数之后的集合求:少了的数,多出来的数等,其实就是求两个集合的增量思路:题目所求就是求2个集合之间的增量(差异),所以...

2014-12-22 18:18:17 977

原创 数组值和下标是同一值域的题目汇总

一、重复的数大小为n+1的数组,元素取值为[1,n],有一个数重复出现,找出这个数

2014-12-22 14:37:15 445

原创 概率题汇总

1. shuffle对于当前位置i,等概率地从[0,i](或者[i,n-1])选取一个数。1)从[0,i]选取循环不变式:当前数组[0,i]的每个数在位置[0,i]出现的概率是相等的随机函数形式:rand(i), 产生等概率的生成[0,i]上的数2)从[i,j]选取循环不变式:原数组的每个数在位置[0,i]出现的概率是相等的随机函数形式:rand(i, j), 等概率的

2014-12-21 22:33:52 624

原创 re-arrange 数组问题汇总

一 re-arrange 数组1排序2 shuffle3 partition(2 way, 3 way, n way)4 interleave3 错排

2014-12-21 20:39:24 714

原创 子集问题的三种解法

1. 按目标向量枚举枚举目标向量每个分量上的可取值def dfs(x,t,s,start): print x[:t] for i in xrange(start,len(s)): x[t]=s[i] dfs(x,t+1,s,i+1)2.按候选集合枚举枚举候选集合每个元素取还是不取,同时填充目标向量def dfs(s,t

2014-12-18 16:00:25 1109

原创 数组双指针法汇总

指针移动方向:相向夹逼,同向移动维护的是一个区间还是只是关心指针指向的两个元素同向移动的、维护一个区间的双指针法即滑动窗口法,2Sum两头往中间夹逼的双指针法。指针为什么可以不回退?即为什么可以i只++, j只--?当A[i]+A[j]2MinusCloset: 寻找两个数,其差值最接近給定值target排序后,同向移动的双指针法。当A[j]-A[i]>ta

2014-12-14 17:12:27 1536

原创 Best Time to Buy and Sell Stock III

思路一 正向反向扫描两次的DP关键是两个子问题的定义:1)这个日期为止,交易一次的最大收益2)这个日期开始,交易一次的最大收益问题的解就是遍历一遍,二者和最大值。而两个子问题都是通过基本的dp求解。int maxProfit(vector &prices) { // write your code here if(prices.size()<

2014-12-12 19:20:31 430

原创 单调栈的应用 Largest Rectangle in Histogram,Max Tree,expression tree, 表达式求值,

单调栈的应用场景:求一侧或两侧比当前元素小(大)的最近的元素。例题:一个数组,对于每个元素,输出左边第一个比它小的元素暴力解法:对于每个元素,往前查看,直到遇到比自己小的,O(n^2)单调栈:维护一个递增栈,满足递增的时候(比栈顶元素大),上一个元素(栈顶元素)就是所求,当新元素不满足递增(比栈顶大),退栈,直到栈顶比当前元素小,输出,然后再把当前元素入栈。每个元素最多入栈一次出栈一次

2014-12-12 18:34:56 734

原创 快速幂

1. 减半递归法计算x^n 先算 half = x^(n/2),如果n是偶数,结果就是 half * half,如果n是奇数,结果就是half * half * x。递归出口 n==1 时候 return 12 非递归(平方法)对于n的每个二进制位,不断平方底数,得到 x^(2^0), x^(2^1), x^(2^2), x^(2^3) 的序列,如果对应二进制位为1,则将这个底

2014-12-11 11:41:36 417

原创 2Sum closest vs. 2Minus closest

一 如果去掉closest,,即2sum 和2minus问题1  这两个题都可以转化成查找问题,枚举其中一个数a,查找另一个,对于2sum 就是查找sum-a,对于2minus就是查找a-diff和diff-a,用hashmap实现O(n)。2 也可以先排序再用双指针法,注意2sum的双指针是两头夹逼,2minus的双指针是同向移动(即滑动窗口法)二 如果是closest 问题

2014-12-10 17:59:16 851

原创 Longest Consecutive Sequence

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.For example,Given [100, 4, 200, 1, 3, 2],The longest consecutive elements sequence is [1, 2, 3

2014-12-09 22:41:58 374

原创 子串/子段问题总结

1. 一般子串问题:求一个串中满足某种条件的子串1)如果所求子串的条件是一个值,比如sum,则考虑子段问题,注意这样一个性质,子段= 前缀差,子段和=前缀和的差,2)如果满足满足滑动窗口的条件,滑动窗口法。3)回文子串等不满足1),2)的,dp的方向考虑4)暴力,但注意不是枚举所有子串(O(n^2))而是枚举终点。2. 两个串中子串问题,或者一个串中多个子串问题LC

2014-12-03 09:23:03 538

原创 求满足某种条件的子串问题- 滑动窗口法

维护一个invariant,窗口对应的子串始终满足给定条件滑动的方式是:右边滑动,直到破坏这个invariant。

2014-12-02 20:17:45 509

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除