自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

靖空间

降低成功的时间复杂度,提高生活的空间复杂度

  • 博客(70)
  • 资源 (5)
  • 收藏
  • 关注

原创 LeetCode Validate Binary Search Tree

这道题就一个难点:要会设置节点的两边限制值。吸收了LeetCode论坛上的建议,不使用INT_MAX 和INT_MIN,我这里使用了LLONG_MIN和LLONG_MAX。因为如果是用INT_MIN,那么第一个左子树的值为INT_MIN的时候就会判断为假,其实为真。虽然leetcode没有测试这个情况,不过健全的程序总是最好的。

2013-12-31 08:09:36 1419

原创 Geeksforgeeks面试题 - Longest Increasing Subsequence

注意题目要求:1 所选的数值不必连续,可以间隔, 但是顺序不能乱2 其中的间隔不用计算,只计算所选数的长度就可以思路:1 从最小两个开始计算。2 计算i个数值的时候,只需要比较A[i]数值和i前所有数值,只要A[i]比任何一个数值A[j]大,那么动态规划表v[i]就在选取v[j] +1 和v[i]最大的值填上v[j]+1表示在j个数值之前的最长递增子序列数是v[j],+1表示加上第i个值A[i],那么递增子序列就增加了1.动态规划法很好解决:

2013-12-31 08:07:16 5350

原创 LeetCode Unique Binary Search Trees

Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that store values 1...n?动态规划法本题关键:如何填表,如何得到计算公式.需要很仔细画图,一步一步找出规律。Catlan公式是可以计算这样的题目的,不过Catalan公式也不好理解,还是

2013-12-30 08:33:57 1256

原创 LeetCode Maximal Rectangle

一道超难的题目,思想难,同时实现也难。本题是动态规划法的高级应用,还依据题目特征优化,难度相当高。经提示,知道是max histogram这个题目的思想的灵活运用,就是每一行运用max histogram算法思想计算。原来LeetCode把max histogram放在这一题之前是有原因的。没有max histogram这一题的思想基础垫底,是很难理解的。LeetCode论坛上的讨论,其实也是这一思想的变种运用,不过感觉讲得并不清楚,他所谓的拖线法,其实就是histogram的倒置。只不过并没有

2013-12-30 08:27:03 3767 4

原创 Leetcode Reverse Linked List II 反转特定区间的链表

这样的题目关键是不要怕麻烦,一定要画多几个链表图,一步一步演算,这样思路就很清晰了。通过头痛折磨的训练之后,这些题目不用调试,一次性AC。

2013-12-29 08:02:27 5208 3

原创 Leetcode Subsets II 有重复元素的组合

Subsets II Given a collection of integers that might contain duplicates, S, return all possible subsets.Note:禁止重复,就使用set,map等容器,就可以很简单解决了。

2013-12-29 08:00:40 1944 1

原创 Leetcode Decode Ways 密码编码方法

两个条件判断的时候就使用两个动态规划表来存储数据,因为每次交叉判断.当然leetcode论坛有使用一个表的,不过使用一个表就很不好理解。记住:有多少个条件判断就需要使用多少个表来存储数据,因为每个判断条件要改动的数据结果都不一样,不能混饶了,保持思路清晰。注意:一定需要画递归树,一步一步地区填表,才不会乱,否则很容易出错!

2013-12-29 07:54:09 2017 1

原创 Geeks 面试题:Binomial Coefficient

要清楚计算方法,然后一步一步计算,注意画好表。下面是动态规划法和递归法。其中第二个程序是最省内存的方法了。比如计算C(n,k) = C(10,8)其实C(10,8) = C(10,2)那么就可以利用这个特性,进一步优化空间有8个空间变成2个空间,而且循环也有10*8成了10*2,最省内存和最优化的方法了。

2013-12-28 22:49:23 1502

原创 LeetCode Restore IP Addresses 恢复IP地址

情况多得让人天旋地转的题目,非常繁琐,只能一个条件一个条件地满足了。本题学了个新的函数:stoi;不过注意这个函数只能是转换int大小的,超过了int的边界就会溢出。跟我们用什么数据类型保存stoi的结果无关。主要考验递归回溯和剪枝的真功夫了。看来这三个技能都是算法必修的,还要可以很灵活运用,否则这样的题目不可能做出来。

2013-12-28 08:03:19 2322

原创 leetcode Merge Sorted Array合并两排序数组

这是一个逆思维,不是从前往后填写,而是从后往前填写,这样就可以避免不断的移动数据,只要一次遍历就可以了。而且不需要使用额外的O(n+m)空间。这里应该是使用了O(m)空间吧,m代表B的长度。严慧敏的数据结构书也有类似算法,需要O(n+m)的空间复杂度。编程之美也有类似的题目,也差不多是这里这样的解法。

2013-12-28 08:00:48 1350

原创 Leetcode Scramble String 搜索乱序字符

好困难的一题,自己研究出来了,不过很难确定是什么判断条件结束,所以耽误了不少时间。一看样子就知道使用递归无疑了。主要卡我时间最长的是递归的时候需要交叉递归的,因为根的两个子树以及下面的所有子树都是可以调换的。思路:1 检查长度是否一样,不一样就返回false2 检查当前两个字符是否为乱序,但是所有字符数相等,检查有两个方法: 1) 使用hash表 2)操作字符string排序比较;这里计算就相当于剪枝了,没有这一步会超时的。3 逐个字符分隔成两个子树,然后递归,注意s1和s2是可以交叉递归的。

2013-12-28 07:55:59 2188

原创 LeetCode Largest Rectangle in Histogram又一个极品程序

属于思想很难,但是程序很简单的题目。有几个心得:1 也曾经考虑过需要记录第一最低高度,第二最低高度,第三最低高度,怎么就是没有想出来是需要使用栈来保持这样的数据呢?答:下次遇到类似的题目要记住,需要使用栈来保存数据。2 当前柱子,怎么才算是组成了最大直方图面积呢?答:每个方柱计算只需要计算自己的最大直方图就可以了,不需要考虑比自己低的方柱,因为比自己低的方柱是由比自己低的方柱负责的!本题的精要思想:每个方柱都只需要和自己邻近的大于自己的方柱组成本方柱最大直方图,然后所有,n个,直方图比较,最大

2013-12-27 08:45:21 3785

原创 LeetCdoe Remove Duplicates from Sorted List II移掉重复链表中的元素

是重复的元素就全部移掉,前面有一道是移掉多余的重复元素,保留一个。这道题的关键就需要注意保存重复元素的前一个指针,这样才能移除元素。考指针和链表的操作熟练程度。

2013-12-27 08:41:52 1675

原创 LeetCode Remove Duplicates from Sorted List

本题考点:1 指针的熟练使用2 判断重复元素和Array的思想是一样的,不过对指针的操作增加了难度。还是需要仔细画链表,一步一步地操作,那么这样的题目还是非常简单的。

2013-12-26 08:24:09 1546 1

原创 LeetCode Search in Rotated Sorted Array II

What if duplicates are allowed? --那就出现一个特别难想出来的特殊情况!如下:[1,3,1,1,1], 3Would this affect the run-time complexity? How and why? --run-time的最坏情况是O(n)了,因为特殊情况出现的时候需要额外处理,可能做线性搜索

2013-12-26 08:18:26 1496

原创 LeetCode Remove Duplicates from Sorted Array II移掉重复数值

只要能记住重复出现多少次,就可以了。增加一个c记录,出现两次的时候,继续出现的数值就跳过,不填写了。

2013-12-25 18:06:56 1710

原创 Leetcode Word Search搜索文中单词

这道题乍一看,有够难的题目了。不过思想又是一条分支递归回溯法,对这个方法熟悉的就不难了。是条繁题,情况多,要理清也不容易。这些题目思路稍微有一点乱就会如乱麻一般难以解开,如果面试遇上这样的题目,又紧张的话,那么会惨啦。一定要注意利用一切手段理清自己的思路:画图,画表,一个判断一个判断,一个问题一个问题地解决。本题卡住的一个知识点:离散数学的逻辑判断没写好,判断错误,结果就错误了。当遇上要连接两个判断条件的时候就要非常小心,运用好离散数学的知识。下面程序注释的很详细了。

2013-12-25 10:23:17 1326

原创 leetcode Combinations计算有多少组合

典型的递归回溯法,多做形成这个递归回溯头脑,就好办了。1 递归一次,填入一个数字2 填入的数字,不能是小于当前数字的值,防止重复3 回溯:记得pop_back()最后加上的一个数字,回溯到上一层。4 结束条件:填写够了k个数字的时候,当前填写完毕,回溯

2013-12-24 08:26:29 4788

原创 Leetcode Minimum Window Substring

这又是属于繁题,需要处理的情况很多,一不小心就会出错。本题思路:利用两个表,以字母为下标,一个记录字母出现的总次数,一个记录当前搜索中出现字母的次数处理情况:1 出现重复子字符的情况,中间的重复字符不需要特殊处理,只需要处理最左边的重复字符,最左边的指标往右走。2 记录当前出现了多少个合法子字符,多次重复出现的算不合法字符,如果合法字符等于子字符长度,那么就是找到一个窗口了。分情况处理,其实很困难,到底如何可以淡定地应付这一类型的题目呢,目前还没找到很轻松的办法。

2013-12-24 08:23:41 1446

原创 LeetCode Sort Colors 分块处理算法和优化counting sort算法

科学思维: 这道题带点QuikSort思想,不过不如说是分窗口处理数据的思想,好像更贴切:O(∩_∩)O~1 red窗口2 white窗口3 blue窗口4 未处理窗口算法一:下面是分三个指标,都指向各个颜色球的末位,这个算法的好处是可以很容易修改成分4个,5个颜色块的算法,当然如果颜色块继续增多,那么最好还是使用counting sort算法了,下面也给出了程序。算法二:利用三个分块的特性,分为前一块,后一块,中间一块,这样更加好处理,程序也简洁很多:算法三:Counting Sort算法

2013-12-23 08:31:34 3011

原创 leetcode Set Matrix Zeroes矩阵设置零

利用额外空间O(m+n)的做法是很简洁的:利用常数空间也可以:就需要巧妙地利用原来矩阵的空间,这里利用第一行和第一列保存额外信息:1 先判断号第一行和第一列是否需要全部置零2 有任何一个该行或者该列的元素为零那么这个第一行或者第一列的元素必然是零,就保存这个零,最后用来判断整个矩阵的这一行或者这一列是否需要置零。3 最后再根据前面判断,决定是否把这个第一行和第一列置零。

2013-12-23 08:18:39 5555

翻译 DPI and Device-Independent Pixels

DPI and Device-Independent PixelsDots per inch (DPI) Device-independent pixel (DIPs).DPI:Points(点):一种尺寸的单位长度就是一个点。一般来说一点是1/72英寸:1 pt = 1/72 inch这个尺寸是可以改变的。在计算机屏幕显示的时候,由于像素不是固定的

2013-12-22 08:22:24 2391

原创 LeetCode Edit Distance 终极省内存方法

这个一看就知道是要用动态规划法的,但是问题是如何填表。难点就是在两个字母相同的时候,直接复制左上角的元素下来就可以了。这个条件还是很难想出来的。理解起来应该是当两个字母相同的时候,就是不用增加1个距离,那么直接复制前面的修改单词方案就可以了。当两个字母不相同的时候,就需要增加一个修改距离,那么就需要在前面三种方案中选择最小的一种方案加1.动态规划法,原始填二维表法:

2013-12-22 08:13:57 2162

原创 C++ sstream 字符数据流的使用

简介:1 iostream支持程序和终端之间的I/O;2 fstream支持程序和文件之间的I/O;3 sstream支持程序和字符对象之间的I/Osstream使用:1 istringstream只允许读出字符,可以使用.str(s)初始化,不允许使用int main() { string s = "-3745 djjkf this ia s very goo

2013-12-22 08:08:47 2639 4

原创 LeetCode Climbing Stairs 递归求解和动态规划法

简单题目,相当于fibonacci数列问题,难点就是要会思维转换,转换成为递归求解问题,多训练就可以了。所以这种类型的题目相对于没有形成递归逻辑思维的人来说,应该算是难题。我的想法是:每次有两种选择,两种选择之后又是各有两种选择,如此循环,正好是递归求解的问题。写成递归程序其实非常简单,三个语句就可以:但是递归程序一般都是太慢了,因为像Fibonacci问题一样,重复计算了很多分支,我们使用动态规划法填表,提高效率,

2013-12-21 08:13:57 20171 6

翻译 MSDN: Render Targets, Devices, and Resources什么是渲染目标,设备和资源

Render Targets, Devices, and Resources渲染目标,设备和资源渲染目标就是我们程序准备画图的地方。一般来说,渲染目标是一个窗口,也可以是一个内存中的位图(bitmap),例如GDI做的backbuffer。Direct2D中的渲染目标是由ID2D1RenderTarget接口代表的。设备是一个抽象概念,代表实际执行显示pixels的对象。硬件设备就是G

2013-12-21 08:00:46 2406

原创 LeetCode Simplify Path

这也属于难题吧,不过是一种特别的难题,或者算是很繁的难题。但是对于我来说就是,需要搞清楚他到底有多少特殊规定。比如题目不明显的规矩:1 如何处理/./--直接忽略2 如何处理/../--回退一个单词(目录)3 第一个字符必须是'/'还有明显的规矩:4 双//处理5 结尾单词后面不能接'/'搞清楚之后就好写程序了,就是把一个一个规矩实现,写入新的字符串中。这些问题都很细,需要耐心处理,而且每个人的处理方法好像都可以有点不一样,不过最主要的就是思路要清晰,不能乱。下面是注释详细的程序,不带

2013-12-21 07:58:29 1609

原创 面试题:计算0到n的数中有多少个2

例如给出n=100,那么就是计算0到100这么多个数中有多少个2.首先要搞清楚2是怎么来的(这话怎么听起来不对劲?):有2个来源:1 个位来源:12,32,42,82,92,22等,其中的22可以先计算个位的2,然后十位的2留待第二个情况处理2 十位来源:20,21,22,23,24,25,26,27,28,29共10个举例1000,1 个位2出现在,2,12,22

2013-12-20 08:49:19 2674 1

原创 LeetCode Plus One

入门题。我分为两种解法:1 通用法,可以适用于+1到9数字的2 特定法,稍微优化点,因为只是加1,所以,如果当前数字小于9的时候就直接加1就可以返回结果了。两种方法都可以写出很简练的程序。知识点:要会根

2013-12-20 08:46:55 1273

原创 LeetCode Text Justification

这道题属于思路不难,但是很繁的题目,程序十分长,需要十分细心,很考编程功底的题目吧。分了两个特殊情况需要额外处理的:1 只有一个单词能容纳到一行的时候2 结尾,最后一行的时候都需要作为左靠齐处理。还好,功力不错了,处理完两个特殊情况之后,马上就AC了。思路:1 计算一行可以容纳多少个单词2 计算这行单词间需要插入多少个空格,单词间最少插入一个空格3 处理上面两个特殊情况翻译为程序,OK。

2013-12-19 08:08:49 2327

原创 Leetcode Maximum Subarray

这是个很经典的题目了。两个方法:1 动态规划法2 二分法这里是使用简单的动态规划法,只需要一个额外空间记录就可以了,只要知道方法,实现起来比二分法简单多了。二分法关键: 当最大子序列出现在中间的时候,应该如何计算最大值?1 要循环完左边和右边的序列2 从中间到左边,找到最大值3 从中间到右边,找到最大值这个判断条件还是有点难想的。

2013-12-19 08:06:20 2193

原创 LeetCode Minimum Path Sum

这个问题相当于寻宝问题Unique paths问题的加权版本。每个格子的数字可以想象成为消耗的时间或者金钱,要寻找最佳路径,是的消耗最小。连所有路径都能寻找到,还会怕找不到最优路径吗?呵呵。不过要会利用动态规划法,从地往上逐步填表。这里只使用一维表,如果使用二维表,会简单点。注意填表不要填错了,下面注有向下走向右走的地方需要格外小心。填写的时候要清楚,每个格子代表什么含义。比如当前格子是table[i]; 那么table[i]代表下一行这个格(由下往上填表)的最优路径,如果是二维表就好理解点,

2013-12-18 08:01:03 1410

翻译 图形API的两种模式

图形API可以分为retained-mode APIs(保存模式API)和immediate-mode APIs(中间模式API). Direct2D是immediate-mode API,而Windows Presentation Foundation(WPF)是retained-mode API.Retained-mode API:用户程序使用图元(基本几何图形)构造一个场景,如某形状,直线等。。图形库保存一个场景模型在内存中。要画一帧图形,图形库把场景转换成为一系列的画图命令,在帧与帧之间,图形卡

2013-12-18 07:59:00 3245 1

转载 【天道酬勤】 腾讯、百度、网易游戏、华为Offer及笔经面经

应届生上泡了两年,一直都是下资料,下笔试题,面试题。一直都在感谢那些默默付出的人。写这个帖子花了我两个夜晚的时间,不是为了炫耀,只是为了能给那些“迷惘”的学弟学妹,一点点建议而已。大家何必那么认真,更没必要说脏话。我不在乎你们怎么评价我。只要有人觉得帖子有用,我就欣慰了。谢谢大家,别说脏话,以和为贵。饮水思源,谢谢应届生上默默付出的师兄师姐,谢谢那么多份笔试题,面试题,没有这些资料,就没有现在的我

2013-12-17 12:32:52 3214 1

转载 人人,金山西山居,腾讯互娱,微信,网易游戏offer及面经

首先感谢师兄在两年前发的贴(【天道酬勤】 腾讯、百度、网易游戏、华为Offer及笔经面经 ),这篇文章对我帮助很大。我写这篇文章一是为了感谢这位同是华南理工但素未谋面的师兄,给我推荐这篇文章的炳爷,以及为我解决难题的浩子,羊兄给的项目帮助,洁洁的理解,王兄提供的两个月免费住宿,以及互娱的BOSS,leader,金山的朱先生等人对我择业的帮助,以及所有直接间接帮助过我的人。二是饮水思源,要把

2013-12-17 12:24:02 3839 3

原创 LeetCode Merge Two Sorted Lists

入门题目了,严蔚敏的书本好像一开始就介绍了这样的题目,以前死背了好多次,始终背不出来,现在已经不用背了,感觉随时都能写出不比书本差的程序。本题就是考链表的操作了。链表的操作是要练出感觉来的。下面的程序提供到位操作,把链表2直接插入链表1中。

2013-12-17 08:20:34 1683 1

原创 LeetCode Unique Paths II

和Unique PathsI差不多,不过增加了一个判断条件,如果有障碍的话,那么这个格就填写0,表示0个路径。不过做这道题还是有点麻烦的:1 需要初始化动态规划法表的第一行2 每次需要更新表的第一个格不过也可以简单点,如果使用额外的一个存储空间,可以少一个判断条件。LeetCode上有程序是这么写的。不过我这里是不使用额外空间,增加一个判断(程序中注意的地方)就可以了,从简洁度来说,好像也差不多。看各人喜欢了。

2013-12-17 08:17:35 3008

原创 LeetCode Unique Paths

这里Note:的含义是如果数值过大会溢出的。这道题对我来说是很新颖的了,因为我之前没见过。但是其实解法却是非常老套的,我一开始居然没想到,所以总结了一下:方法论总结:遇上新颖没见过的题目:1) 查看其特征; 2) 搜索大脑有什么熟悉的题目,可以套的,或者相似的可以退到出来的; 3) 罗列出来这些题目:全排列, 水槽,TwoSum,等等;4) 搜索大脑里面有什么熟悉的算法;5) 罗列出来:动态规划法,递归,回溯,二叉树遍历,贪心法,递归树,分治法,观察特征计算法,等等,肯定有可以套的算法的!

2013-12-16 08:34:21 7878

原创 LeetCode Permutation Sequence

本题最直接的算法就是,一个一个permutation的产生,然后数到k就是答案了,但是这样的程序很慢,高手是不能这样写程序的。O(∩_∩)O~其实这类题有个很特别的方法做的,不过没看过的话,就很难想出来了。可以参考下面博客,求一个数列的全部全排列。而不同的就是这里只是求某个特定的全排列。定位下标的方法就可以写出很快的程序了。下面程序8ms都可以过,我分了几个函数,希望可以清晰一点吧。The set [1,2,3,…,n] contains a total of n! unique pe

2013-12-16 08:29:53 1880

原创 Windows编程基础知识点

什么是窗口(window)?对于从编程的角度解析,不要简单地认为是一个程序的窗口,而是如下面定义:什么是句柄(handle):是一个号码,操作系统使用这一的号码识别对象。操作系统有一个很大的表,包含了所有创建的windows的句柄,操作系统就是通过查找这一的表找到windows的。记住句柄不是指针。Windows入口:每个Windows程序都有一个入口点:WinMain 或者 wWinMain为什么编译器知道激活wWinMain而不是main呢?因为Microsoft C runtim

2013-12-15 08:03:37 2072

OpenGL完美的心形

可以参考本人博客: http://blog.csdn.net/kenden23/article/details/27338943 是一个使用OpenGL FreeGlut画的一个完美的心形。

2014-05-28

简单Windows弹球程序

详细描述,请看下面博客: http://blog.csdn.net/kenden23/article/details/17268877

2013-12-14

第一人称3D镜头框架代码

http://blog.csdn.net/kenden23/article/details/14051187 这个博客讲解的代码框架。讲解的类部分另外下载,可在博客上找。

2013-11-02

第一人称3D镜头类

http://blog.csdn.net/kenden23/article/details/14051187 这个博客讲解的代码,可以实现一个3d漫游第一人称视觉的类。一个镜头类,可以控制3D视觉,实现漫游效果

2013-11-02

算法问题集合源文件 堆排序 吊桶排序 最大子段和等

这个是本博客算法专栏的部分.cpp源文件,方便大家打包下载,如果没有积分的话,可以到我博客粘贴,博客有完整的代码。 http://blog.csdn.net/column/details/billsalgorithm.html?page=1#12944927 这里是部分源文件,暂时没时间全部做好。 可以直接加入项目运行的,建议使用vs2012编译。

2013-10-22

空空如也

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

TA关注的人

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