##Sort
- 算法导论版本
从左开始与pivot比较,左边始终是<=pivot的元素,使用随机化pivot版本
int partition(int arr[], int begin, int end){
int pivot_index = rand() % (end - begin + 1) + begin;
swap(arr[pivot_index],arr[end]);
int pivot = arr[end];
##Sort
从左开始与pivot比较,左边始终是<=pivot的元素,使用随机化pivot版本
int partition(int arr[], int begin, int end){
int pivot_index = rand() % (end - begin + 1) + begin;
swap(arr[pivot_index],arr[end]);
int pivot = arr[end];
##WeChat Live Coding
实验室人的TST计划——微信面试题,一个小时内做出如下5道题,在collabedit上在线coding
拿来学习一下。。。啦啦啦啦啦啦
###思路
##构造n对括号的全部有效组合
###思路
递归构造
###Code
##LIS变种
从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)
###思路
##Top K 问题
###Methods
###Complexity
##Longest Increasing Subsequence
之前的一篇GIST其实已经解决了这个问题,只不过现在使用STL技术更加优雅地写出来了
这个问题可以用DP解决,如果定义
dp[i] = 以ai为结尾的最长上升子序列的长度
那么转移方程
dp[i] = max{1,dp[j]+1 | j < i and aj < ai}
##Longest Common Subsequence
动态规划
设序列X= < x1, x2, …, xm > 和 Y= < y1, y2, …, yn > 的一个最长公共子序列Z= < z1, z2, …, zk >,则:
##Combination and Permutation
基于递归的思路
#include <iostream>
#include <vector>
#include <string>
using namespace std;