自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

靖空间

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

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

原创 Craking the Coding Interview 面试题:随机抽出子数列

在给定的一个大数列中,随机抽出一个子数列,要求所有数被抽出的概率都是一样的,如下面的运行结果:int rangeRandNum(int a, int b){ return rand()%(b-a+1) + a;}vector randPickArray(vector &arr, int m){ vector picks(arr.begin(), arr.

2014-01-31 09:48:30 1833

原创 Leetcode Populating Next Right Pointers in Each Node II

Populating Next Right Pointers in Each Node II What if the given tree could be any binary tree? Would your previous so如何处理各个细节的问题很重要,决定了能否写出更加简洁的程序来。

2014-01-30 07:02:53 2826

原创 Geeks面试题: Maximum Sum Increasing Subsequence

下面程序是我的解决方法,时间效率也是O(n*n) 思路:1 从地往上解决法2 计算当前数值到下一个数值是否是递增,如果是递增,后面所有数值的递增数列加上当前数值3 一直计算到最后,就得到数列中所有数值以自己为结束的最大递增子段和因为有可能以最后一个数值结束的递增子段和不是总体得到的最大递增子段和,例如: 3 11 2 10填表得到: 3 14 2 12,那么最大递增子段和是14,不是12所以需要最后比较数组中所有数值,求最大值,当然也可以如下面第二个程序一边求解一边判断最大值,填表得到的是3 14

2014-01-30 06:51:16 3037 7

原创 leetcode Convert Sorted Array to Binary Search Tree

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.本题是二分法的高级应用,每次选择root都是从数列的中间选择,那么最后构造出来的二叉树一定是高度平衡的BST了。

2014-01-29 09:44:03 1815

原创 Leetcode Max Points on a Line

5星级难度题目。本题是考对hash表的灵活运用。1 斜率是double型的数据,和点对应起来那么hash表的容器就使用了unordered_map<double, int>;2 要会排除同一位置的点,那一定是同一直线的点3 要避免重复计算斜率,我这里的做法是增加一个hash容器,记录存在了的斜率,这样避免重复。56ms左右的程序,本程序还是相当快的

2014-01-29 08:59:57 1984

原创 Leetcode Combination Sum II

标准递归回溯法可以搞定,防止重复,使用set容器。

2014-01-28 16:12:22 2758

原创 Leetcode Best Time to Buy and Sell Stock III

要掌握这种思想:1 两段分段思想2 前往后,后往前都可以处理数列的思想时间复杂度是O(n),不掌握这种思想是很难做出来的。

2014-01-27 08:53:23 2243 2

原创 leetcode Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.For "(()", the longest valid parentheses substring is "()", which has length = 2.Another example is ")()())", where the

2014-01-27 08:46:14 2147

原创 Leetcode Palindrome Partitioning

典型的递归回溯法,当然可以利用动态规划法提高点效率。下面是标准的递归回溯程序:

2014-01-26 08:17:19 1764

原创 Leetcode Reverse Nodes in k-Group

这种题目一般有技巧:1 增加dummy前置节点,dummy.next指向头节点,可以让程序简洁点2 注意保存当前节点的next节点3 可以利用好k来计算,注意准确计算需要操作的节点指针

2014-01-26 08:13:57 2553

原创 Leetcode Sort List 链表归并排序

本题好像使用quicksort是不能AC的,只能使用归并排序了。之前觉得是很困难的题目。训练了这么久算法,功力终于上升了。虽然还没达化境,但是以前觉得什么归并排序,快速排序好像很难,曾经死记过,始终没有记住,一直都觉得很困惑,怎么才能写出这些算法出来。如今,随时都能写出这样算法来了。而且代码基本上都很工整,清晰的,O(∩_∩)O~原来算法是练出来的,不是死记硬背的。我说的化境,是觉得有一天会无论什么难题都可以轻松利用学过的算法,转化成优雅的代码,那时候所有算法都已经融会贯通了,所有题目差不多是一样

2014-01-25 09:38:47 2262 2

原创 Leetcode Container With Most Water

知道原理就是很简单的程序。两边搜索,短板往里走。因为往里走,代表宽度减小,那么宽度小的时候,只有遇上更高的高度才能组成更加大的container。

2014-01-25 09:32:37 4601

原创 Leetcode Interleaving String

这种题目应该立即反应需要动态规划法,会填表,然后翻译为程序。可以用递归法求解,但是会超时,而且好像都不容易写。不过这里是三个字符串,应该如何设计这个表是个大问题。这里用s1和s2作为二维表的两个维的下标,然后徐两个下标相加得到s3的一维下标,进行比较字符。这是本题关键,也是这个表这么难设计,所以本题的难度还是很高的。对没接触过这类题目的人来说,应该是五星级难度的题目了。

2014-01-24 08:29:15 1732

原创 Geeks面试题:Floyd Warshall Algorithm 所有顶点之间的最短路径问题

就是严慧敏的数据结构书上的图论介绍的所有顶点之间的最短路径问题。不过书上没有说是使用动态规划法做这道题的,也就说的并不透切。记得当年钻研这本书的时候,觉得本题十分难理解,半天没搞明白,然后后来反复记了本题的程序好几遍,始终没记住,终归没有彻底理解本题的思想精髓,那么是很难写出程序的。利用动态规划法的思想做这道题,难度还不是特别大的。主要想清楚什么是从地往上(buttom-up)的方法,如下述:

2014-01-24 08:07:41 3579

原创 Leetcode Clone Graph

这里使用深度优先搜索。这样可以递归实现,如果是宽度优先,就要额外使用queue容器。关键点:1 这里的clone需要深度拷贝,就是要使用new操作了2 防止回路无限循环,就要使用hash表,这里使用unordered_map记录访问过的节点。因为这里的label应该是唯一的才对,所以可以直接使用label作为关键字就可以。看起来挺难的,因为图总给人困难的感觉,其实不难,3到4星级难度吧,很多都是基本操作组合起来。

2014-01-23 06:42:49 5923 4

原创 Leetcode LRU Cache

五星级难度的题目。这里的get和set操作都要求时间复杂度为O(1)。思考了好久才想到要用一个双向链表数据结构来保存优先级列表,代表这里的LRU Cache。这个是本题的关键。如果使用其他方法,例如堆操作,好像最多能使得get或者set其中一个是O(1),一个需要O(lgn),会超时。因为这里需要利用key快速定位value,要频繁修改优先级,即也要利用key快速定位优先级,并能修改优先级。原来要考指针的熟练使用。关键点:1 建立一个新数据结构:双向链表,包含数据key和value2 使用一个

2014-01-23 06:29:49 2072

原创 Leetcode Populating Next Right Pointers in Each Node

直接上递归法新知识点:重点注意:利用新构造的数据结构有人会觉得使用递归并不符合常数空间的题意,那么可以改成非递归:

2014-01-23 06:06:50 1301

原创 Leetcode Pascal's Triangle II

下面程序空间效率O(k),使用了两个vector<int>交替使用,因为只利用上一行就能填写下一行了。因为只利用当前行两个数值的信息覆盖新填写的数列格也是可以的,所以只利用一个vector<int>也是可以的。Leetcode上总有人写出更加简洁的程序的:

2014-01-21 09:31:33 1353

原创 Cracking the coding interview: 查找文中两个单词的距离

解法一:只需要一次性查询的,我们可以利用两个下标,一个记录最后一次遇到第一个单词的下标,另外一个记录遇到另外一个单词的下标,然后每次比较两个单词的距离,记录当前最小的两个单词的距离,最后就得到最小的距离了。时间效率O(n);程序如下:解法二:这是个可以优化重复查找效率 的算法,利用额外空间存储文中所有单词出现的次数,并记录其出现的位置,形成一个数列,如果需要查找两个单词距离的时候,就把两个单词的出现位置数列合并起来,遍历一次这个数列就可以得到两个单词的距离了。那么需要建立一个表,所用时间效率是:O(n

2014-01-21 09:28:46 1761

原创 Leetcode Flatten Binary Tree to Linked List

深入理解了指针和树的操作,那么这道题是十分简单的,但是没理解好,那么这道题是非常难的。重要一点:遍历访问的时候,不能改变没有访问过的树节点的结构。也因为这一点,所以这道题不能像普通先序遍历那样写程序。仔细观察思考会发现两点特征:1 修改后的树只有右子树,2 访问过之后的节点是可以修改其结构的那么我们可以使用逆先序遍历 - 因为先访问最右边的右子树,那么这个右子树不会在后面的访问中需要了,就可以改变其树形结构了。想清楚这一点之后,这道题就变得非常简单了。下面两个逆先序遍历的程序都十分简单:

2014-01-20 19:18:32 1311

原创 Geeks面试题: Egg Dropping Puzzle

这道题有点拗口,就是要知道基本情况:1 有0楼的时候,就不需要实验了,返回02 有1楼的时候,只需要试验一次就可以了3 有一个蛋的时候,最坏情况就需要把所有楼都试验一次在这三种基本情况假设下去想这个问题就容易多了分两个情况:1 碎蛋:往下走2 没碎蛋:往上走无论往上走和往下走都可以截去下面和上面的楼层不考虑不过注意的就是,碎蛋,那么蛋蛋减小1了,没碎蛋那么蛋蛋不用减小。大笑理解透彻,那么优化动态规划法就可以写出来了:下面是GeeksforGeeks的动态规划法和递归法求解,和我写的

2014-01-17 08:56:59 2438

原创 链表的QuickSort快速排序法

使用QuickSort快速排序算法,排序一个链表。下面是quickSort,因为quickSort算法的最坏情况是O(n*n), 所以如果做LeetCode上的Sort List这道题目,会遇上最坏情况超时的,不过这是个很好的算法,故此贴出来。也看了有些博客或什么网站也写有quickSort排序链表的文章,注意看清楚了,很多并不是真正的链表排序,而是排序了链表的值,那样并不是链表操作,不能算链表的quicksort。有几个地方需要注意的:1 分成两个链表的时候,注意把结尾=NULL,重新合并中间

2014-01-17 08:54:15 4348 3

原创 Geeks面试题: Cutting a Rod

要根据上面的公式进行思考,形成抽象思维,和系统思维。这种抽象能力非常难,也非常重要,直接决定了效率,甚至能否做出来的问题。优秀的程序员和普通程序员之间的差距也许就从抽象思维能力中分出来了。不过慢慢对动态规划法和递归回溯法熟悉了,其实就可以撇开什么公式和递归回溯,直接从表入手,填表,把表翻译为程序也是个很不错的做法。

2014-01-16 09:04:21 2148

原创 Leetcode Word Ladder

没见过这样的题目的话,也很难搞懂他的要求的,所以要问问题:1 中间的选单词,是否可以乱序? -- 可以的,可以随便在字典里面抽那个单词都可以。2 是否需要计算所抽单词的中间距离? 不需要好难的一道题目,虽然思想就是层序遍历树的思想,但是细节太多,很容易导致出错,而且有人使用同样的思想做的却会超时。原因有几个:1 细节需要优化好 - 我增加层间标志的做法就超时了但是使用两个队列的做法不超时,好奇怪的题目。2 对于原字典dict可以作破坏性操作-就是可以delete其中的元素这样操作,速度提高

2014-01-16 08:55:19 1489

原创 leetcode Best Time to Buy and Sell Stock II

Best Time to Buy and Sell Stock IISay you have an array for which the ith element is the price of a given stock on day i.Design an algorithm to find the maximum profit. You may complete as

2014-01-13 08:12:33 2157 2

原创 Geeks 面试题: Rat in a Maze 回溯法解迷宫

Backtracking 回溯法的三部曲:1 初始化原始数据,开始点2 判断下一步是否合法,如果合法就继续递归搜索答案,如果不合法就返回3 递归直到找到答案,返回真值这里只需要找到一个解就可以,所以只要找到一个解就可以马上返回。Leetcode上很喜欢找出所有解的,那么就需要递归所以可能路径了。

2014-01-13 08:09:17 3732 3

原创 Geeks面试题:Matrix Chain Multiplication

Matrix Chain MultiplicationGiven a sequence of matrices, find the most efficient way to multiply these matrices together. The problem is not actually to perform the multiplications, but mere

2014-01-12 10:38:17 1726

原创 Leetcode Best Time to Buy and Sell Stock

Best Time to Buy and Sell StockSay you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, bu

2014-01-12 10:36:48 1782

原创 Geeks 面试题: Coin Change最大找零方案数

Coin ChangeGiven a value N, if we want to make change for N cents, and we have infinite supply of each of S = { S1, S2, .. , Sm} valued coins, how many ways can we make the change? The order

2014-01-11 12:41:31 3018

原创 leetcod Binary Tree Level Order Traversal II

Binary Tree Level Order Traversal II Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).For

2014-01-11 12:39:17 2057

原创 Geeks面试题: Longest Palindromic Subsequence

注意:这里是最大子序列的palindromic,不是最大子串的palindromi(leetCode上有道题是)。最大子序列就是:1 所选取的字符是原数列的字符2 字符可以间隔抽去(主要区别,子串是不能有间隔的)3 字符的顺序不能打乱。

2014-01-10 07:44:54 2263

原创 LeetCode Construct Binary Tree from Preorder and Inorder Traversal

Construct Binary Tree from Preorder and Inorder Traversal Given preorder and inorder traversal of a tree, construct the binary tree.Note:You may assume that duplicates do not exist in

2014-01-10 07:42:52 1166

原创 Geeks面试题:0-1 Knapsack Problem

递归程序虽然慢,但是理解好递归程序是非常有助于理解好本题的。动态规划法和递归法程序:

2014-01-09 07:22:38 2256

原创 Leetcode Binary Tree Zigzag Level Order Traversal

我使用了两个deque容器做,其实可以使用stack。我觉得我的代码还是非常清晰的,一块一块的分好,思路很容易跟的。

2014-01-09 07:09:46 1158

原创 Leetcode Symmetric Tree

利用递归法,可以很轻松解决的问题。增加一个adaptor接口函数就可以了,搞清楚对称的判断方法:每一个左子树与右子树的节点相等,然后是左子树的右子树和右子树的左子树相等, 有点拗口,不过画图就很好理解了。

2014-01-07 10:19:42 1164

原创 Leetcode Gray Code

思路:在已有的数组中,增加一个最高位得到一个新数组,然后压入原数组,如此循环。程序可以写的非常简洁。当然有数学公式可以计算的,不过面试程序题,还是写个循环比较保险。

2014-01-06 07:54:33 1578

原创 Geeks面试题:Min Cost Path

Min Cost PathGiven a cost matrix cost[][] and a position (m, n) in cost[][], write a function that returns cost of minimum cost path to reach (m, n) from (0, 0). Each cell of the matrix repr

2014-01-06 07:54:23 1306

原创 Leetcode Search a 2D Matrix 搜索二维表

这道题的解法倒是很多的,网上也有不少分析的。比如LeetCode论坛上有分析非常仔细的,不过他好像推荐的是个O(n+m)的时间效率,这次也是个例外了,他的分析和例子都不好。因为这道题的最优时间效率应该是O(lgm +lgn); m,n 代表行和列数,而且也没有那么复杂,不过就是考二分法的运用,能够灵活运用了做这道题不是难事,本人一次性通过。这里是使用二分法,先列二分,然后行二分,看似复杂,其实是很简单的程序。不用看Leetcode上的那么长编大论的分析。下面是我的程序,看起来长,其实结构很清晰,很好

2014-01-02 08:48:20 1579

原创 Geeks面试题: Edit Distance

Problem: Given two strings of size m, n and set of operations replace (R), insert (I) and delete (D) all at equal cost. Find minimum number of edits (operations) required to convert one string into an两个一维表的C++实现

2014-01-02 08:45:54 1417

原创 Leetcode Binary Tree Level Order Traversal

Binary Tree Level Order TraversalGiven a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).利用两个队列会思路更加清晰点,增加了点额外空间。

2014-01-01 08:23:03 1719

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关注的人

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