自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 Find K Pairs with Smallest Sums

原理如上图所示,最坏情况时间复杂度是k*klogk 参考了discuss的两份代码写了自己的代码 class Solution { public: class cell { public: int first; int second; int third; cell(int a, int b, int c) :first(a) , second(b) , third(c)

2016-09-30 18:23:48 249

原创 Mini Parser

自己逐字符判断,if、循环、迭代写了一大堆没通过,被一份使用C++字符流的代码吊起来打了 难点还是在流程控制部分,题不难 class Solution { public: NestedInteger deserialize(string s) { istringstream in(s); return deserialize(in); }

2016-09-29 17:01:34 195

原创 Random Pick Index

看到Each index should have equal probability of returning.第一反应就是水塘抽样算法,但是由于对这个算法的理解还是不深,所以没有深入地去想 自己遍历了一遍数组,找到target和它的重复之后用随机函数随机抽一个返回,但是随机函数都是用时间做种子的,for循环执行太快,一秒之内多次调用随机函数的话会导致输出不变(因为随机种子没变),解决方法是动态

2016-09-28 18:44:56 254

原创 Jump Game

思路偏了,想到了动态规划和dfs,但是时间复杂度很高,逻辑也不容易理清,用贪心就好 class Solution { public: bool canJump(vector& nums) { int reach = 0; //能到达的最远的地方 int i = 0; for ( ; i < nums.size() && i <= re

2016-09-27 22:51:35 125

原创 Course Schedule

判断有向图是否有回路 1.dfs,需要记录路径,每次向下搜索到一个节点后需要去路径中找是否出现过,太麻烦了,写了一个dfs的(没加路径记录),不能处理A->B->C,A->D->C这种情况 class Solution { public: class Node { public: int No; vector Next; int root = -1; Node(int x

2016-09-26 23:42:24 153

原创 Lowest Common Ancestor of a Binary Tree

dfs,第一次用了临时vector存储经过的路径,最后比较两个路径得到公共祖先节点,结果超过内存限制了,也是第一次遇到超过内存限制的情况,o(╯□╰)o 这是代码 class Solution { private: vector > res; public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNo

2016-09-25 09:57:29 145

原创 Palindrome Partitioning II

进入中级题部分后被虐的好惨QAQ 从后往前构造二维数组isPalin,用于存储已经确定的回文子串。isPalin[i][j]==true代表s[i,...,j]是回文串。 在构造isPalin的同时使用动态规划计算从后往前的最小切分数,记录在min数组中。min[i]代表s[i,...,n-1]的最小切分数。 (上述两步分开做会使得代价翻倍,容易TLE) 关键步骤: 1、min[i]

2016-09-24 11:03:40 158

原创 Palindrome Partitioning

暴力搜索寻找回文字符串(所有字符扫一遍),找到后用dfs做排列组合(这两步同时进行),空间复杂度时间复杂度双高,时间复杂度大概是O(n^2) Palindrome Partitioning II 的解法与这道题大体相同,只不过为了节省时间,用了DP来找回文字符串,比上面提到的找回文方法好一些 class Solution { public: vector > partition(string

2016-09-23 15:05:57 258

原创 Combination Sum II

昨天刚做了Permutations II,今天碰到相同的迭代格式就不会了,囧 主要还是一个dfs class Solution { public: void dfs(vector num, int start, int target, vector array, vector > &result) { if (target == 0) { result.push_back(arra

2016-09-22 16:07:37 141

原创 Permutations II

第一种方法(非递归) 算法的4个步骤和循环的退出条件我在注释中都写清楚了 class Solution { public: void swap(int &i, int &j) { int temp = i; i = j; j = temp; } vector > permuteUnique(vector &num) { vector> res; int i, j,

2016-09-21 16:44:58 176

原创 Unique Binary Search Trees II

1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 如上图所示,对于根节点,我们需

2016-09-20 12:41:14 180

原创 Construct Binary Tree from Preorder and Inorder Traversal

练习使用栈的方法,折腾了半天  囧 class Solution { public: TreeNode* buildTree(vector& preorder, vector& inorder) { if (preorder.size() == 0)return NULL; stack stak; TreeNode* res = new TreeNode(preorder[0]);

2016-09-18 10:58:18 192

原创 Number of Islands

一开始思路一直在边界上打转,没想到正确方法是把所有的island都变成0(即去除孤岛),在变的过程中计数 这里使用递归的方法 class Solution { public: int numIslands(vector > &grid) { int rows = grid.size(); if (rows == 0) { return 0; } int cols = g

2016-09-15 09:16:05 168

原创 3Sum Closest

先对数组排个序。枚举第一个数,然后设两个指针,在第一个数的后半段开始王中间收缩,if sum > target则右指针往左移, if sum 排序可以大大降低时间复杂度,和3sum那道题有点像,左右指针向中间收缩和木桶装水那道题有点像。 class Solution { public: int threeSumClosest(vector& nums, int target) { if

2016-09-14 09:34:48 153

翻译 Inside SQLite Section 1.1 应用实例

1.1应用实例 1.1.1一个简单的SQLite应用 #include #include "sqlite3.h" int main(void) { sqlite3* db = 0; sqlite3_stmt* stmt = 0; int retcode; retcode = sqlite3_open("MyDB", &db); /* Open

2016-09-14 08:55:11 787

原创 Construct Binary Tree from Inorder and Postorder Traversal

对于需要自底向上建树的情况,用循环不如用递归方便 递归的思路就是通过从后向前查找postorder来获取每个子树的根节点,找到根节点后去inorder中找到对应的值,用这个值把inorder分成两半,得到左右子树的大小,用得到的左右子树的大小再去分割postorder 这种方法太麻烦了,其实本质上说单独的一个inorder或者postorder就包含了用于构造一颗树的充足的信息,多给一个数组没

2016-09-12 10:51:03 248

原创 Unique Paths II

开始用dfs,超时 应该像Unique Paths一样用动态规划,只不过需要额外处理边界有障碍和内部有障碍的情况 没找到用二维dp数组的例子 下例对obstacleGrid的边界处理部分值得学习 class Solution { public: int uniquePathsWithObstacles(vector>& obstacleGrid) { // parameters ch

2016-09-11 10:45:30 162

原创 Ugly Number II

记录一下用Index代替list的思想,非常简洁,节省空间 class Solution { public: //求三个数的最小值 int min(int a, int b, int c) { int minNum = a > b ? b : a; return minNum > c ? c : minNum; } //求第N个丑数 int nthUglyNumber(int

2016-09-10 15:27:50 134

原创 UTF-8 Validation

按照UTF-8的定义多做几次判断就行,我在判断首byte的时候11000000和00001100这两种情况不好判断,即1在中间的时候不好计数,还是答案简洁: class Solution { public: bool validUtf8(vector& data) { int count = 0; for (auto c : data) {

2016-09-09 09:43:59 471

原创 Longest Substring with At Least K Repeating Characters

开始想到了用出现次数小于K的字符做分割符,觉得用map存储出现次数会增加lgn的时间复杂度,也顾忌分割之后每小段还会有出现次数小于K的字符出现,但是没能更进一步想到用用递归和哈希表来解决这两个问题。用递归的时候又蠢得没用分治,用了一颗多叉的递归树,导致分枝控制条件各种复杂,最后还是回归官方答案的分治法了QAQ class Solution { public: int longestSubstr

2016-09-08 09:29:04 269

翻译 Inside SQLite Chapter 1.概览

概览 过去的几十年中涌现了许多数据库管理系统(DBMSs),例如DB-2,Informix,Ingres,MySQL,Oracle,SQL Server,Sybase等。SQLite近几年才加入到DBMS的大家庭中,并且在商业应用上取得了成功。2000年5月9日,SQLite首次发布。该数据库是一个具有以下特性的关系型数据库: 无需配置(Zero configuration) 在使用SQ

2016-09-07 15:37:42 594

原创 Lexicographical Numbers

字典排序是按照10进制的各个位排的,我跑去排二进制的各个位去了,o(╯□╰)o 官方discuss的代码循环里if   else剪枝设计的太精巧了,记录一下 class Solution { public: vector lexicalOrder(int n) { vector res(n); int cur = 1; for (int i = 0; i < n; ++i) {

2016-09-03 09:34:55 218

原创 Guess Number Higher or Lower II

看了半天还是似懂非懂,o(╯□╰)o 用了极小极大算法:在1-n个数里面,我们任意猜一个数(设为i),保证获胜所花的钱应该为 i + max(w(1 ,i-1), w(i+1 ,n)),这里w(x,y))表示猜范围在(x,y)的数保证能赢应花的钱,则我们依次遍历 1-n作为猜的数,求出其中的最小值即为答案 class Solution { public: int getMoneyAmount

2016-09-02 14:35:00 159

原创 Guess Number Higher or Lower

题意是如果给出的数比猜的数大,返回1,一开始理解错了 用二分法来做,mid = (left+right)/2这种写法行不通,因为int越界会导致死循环,改为mid = left + (right-left)/2 class Solution { public: int guessNumber(int n) { int left = 1; int right = n; int mi

2016-09-01 09:07:47 140

MongoDB_Architecture_Guide(MongoDB架构指导)(个人翻译版)

为了学习Mongodb自己翻译的材料

2017-05-01

Inside SQLite(SQLite技术内幕) 原版+个人翻译版

个人独立翻译的《Inside SQLite》。由于时间仓促,自己也是初学者,有许多地方实在是不尽如人意,最近比较忙,之后有时间的话会修订一次。欢迎任何形式的转载、修订。希望能和大家一起学习。

2016-10-14

opengl入门

两个初学opengl时做的小程序,分别实现正方形和正方体的旋转,都详细注释了,完全原创,希望帮助到学习opengl的人

2014-12-02

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

TA关注的人

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