随笔分类 -  算法练习

面试题级别的算法练习
摘要:做过不少题,比较系统的有LeetCode系列、POJ系列、Interview Street Challenges系列。自己总结的有简明排序代码、八皇后N解、逆序数相关题等。其他题还比较散,等十月份面试高峰期过了就系统的总结总结。 阅读全文
posted @ 2012-10-07 16:19 紫红的泪 阅读(1212) 评论(0) 推荐(0) 编辑
摘要:1, The Triangle (POJ 1163) 2, Function Run Fun (POJ 1579) 3, Recaman's Sequence (POJ 2081) 4, World Cup Noise (POJ 1953) 5, Strange Towers of Hanoi (POJ 1958) 6, Common Subsequence (POJ 1458) 7,... 阅读全文
posted @ 2012-10-07 16:12 紫红的泪 阅读(684) 评论(0) 推荐(0) 编辑
摘要:LeetCode: http://www.leetcode.com/onlinejudge, Note: (Added 9/18/2012)3Sum3Sum Closest4SumAdd BinaryAdd Two NumbersAnagramsBalanced Binary TreeBinary Tree Inorder TraversalBinary Tree Level Order TraversalBinary Tree Level Order Traversal IIBinary Tree Zigzag Level Order TraversalClimbing StairsComb 阅读全文
posted @ 2012-10-07 15:47 紫红的泪 阅读(1703) 评论(0) 推荐(0) 编辑
摘要:还是把矩阵中值为0的点的行列都置零,上次是开辟了额外空间,这次要求O(1)的空间复杂度。 void setZeroes(vector<vector<int> > &matrix) { bool bColZero = false, bRowZero = false; if (matrix.size() == 0 || ... 阅读全文
posted @ 2012-10-07 14:13 紫红的泪 阅读(1867) 评论(0) 推荐(0) 编辑
摘要:又见翻转链表,这回是给定接口的递归和非递归翻。比之前那篇反转链表多了接口限制。 #include <iostream> using namespace std; typedef struct node LinkNode; struct node { int data; LinkNode *next... 阅读全文
posted @ 2012-10-06 23:52 紫红的泪 阅读(429) 评论(0) 推荐(0) 编辑
摘要:‘?’匹配任意单个字符,‘*’匹配任意字符序列(包括空字符序列)。如果匹配整个串返回true。 例: isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "*") → trueisMatch("aa", "a*") → trueisMatch("ab" 阅读全文
posted @ 2012-10-05 22:16 紫红的泪 阅读(4280) 评论(0) 推荐(1) 编辑
摘要:‘.’匹配任意单个字符,‘*’匹配0个或多个前一字符。如果匹配整个串返回true。 例: isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", &q 阅读全文
posted @ 2012-10-05 21:58 紫红的泪 阅读(8913) 评论(1) 推荐(0) 编辑
摘要:XX公司的一道笔试题,煤矿有3000吨煤要拿到市场上卖,有一辆火车可以用来运煤,火车最多能装1000吨煤,且火车本身需要烧煤做动力,每走1公里消耗1吨煤,如何运煤才能使得运到市场的煤最多,最多是多少? 最优解: 1,火车从煤矿出发3次,也即回来2次。(这样可以把3000吨都运出,回煤矿次数越多越费煤,所以最少需要回2次) 2,火车每次回煤矿要是空车。(如果不是空车,回煤矿两次显然... 阅读全文
posted @ 2012-10-05 15:33 紫红的泪 阅读(3271) 评论(0) 推荐(0) 编辑
摘要:主要包括全排列和回溯两类,其中全排列可以递归与非递归,回溯也可以递归与非递归。于是加一起有4种解法。 #include <iostream> #include <algorithm> using namespace std; template <size_t N> struct ArraySizeHelper {char _[N];}... 阅读全文
posted @ 2012-10-04 23:26 紫红的泪 阅读(2119) 评论(0) 推荐(0) 编辑
摘要:实现一个高效的不可变队列,队列有enqueue和dequeue,分别从队列push、pop一个元素,并返回新队列。原有队列保持不变。 template<typename T> class const_queue { public: const_queue() : m_nFrontIdx(0), m... 阅读全文
posted @ 2012-10-03 15:59 紫红的泪 阅读(947) 评论(0) 推荐(0) 编辑
摘要:题意是要求在01矩阵中,把0的点的行和列都置零。 #include <iostream> #include <vector> #include <utility> using namespace std; void unguarded_setZero(int *matrix, int m, int n, int i, int j... 阅读全文
posted @ 2012-10-01 12:06 紫红的泪 阅读(413) 评论(0) 推荐(0) 编辑
摘要:字符串乘法,有两个字符串表示的正数a、b,求乘积c,也用字符串表示。涉及字符串乘法、字符串加法。 class Solution { private: char mul(char a, char b, char &carry) { int val = (a - '0') * (b - '0') + (carry... 阅读全文
posted @ 2012-09-27 13:48 紫红的泪 阅读(1469) 评论(0) 推荐(0) 编辑
摘要:就是合并两个有序链表了,递归解妥妥儿的。 ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { if (l1 == NULL) return l2; if (l2 == NULL) return l1; ListNode *ret = NULL; ... 阅读全文
posted @ 2012-09-27 11:14 紫红的泪 阅读(3524) 评论(1) 推荐(0) 编辑
摘要:××公司面试题,看了后没想法,后搜一下发现居然是高中奥数。真无语了,这年头面试官都想干啥呢?!尼玛,这题你自己会做不啊?!平面上n个圆,任意两个都相交,是否有一条直线和所有的圆都有交点。 阅读全文
posted @ 2012-09-26 22:24 紫红的泪 阅读(1128) 评论(1) 推荐(0) 编辑
摘要:神马是离散化:http://www.matrix67.com/blog/archives/108 例题:POJ 1151 Atlantis #include <iostream> #include <vector> #include <set> #include <algorithm> #include <iomanip> using n... 阅读全文
posted @ 2012-09-23 12:43 紫红的泪 阅读(561) 评论(0) 推荐(0) 编辑
摘要:昨天面了一家对算法、数学要求比较高的公司。然后遇到了个经典概率题,没做出来。工程中基本没用到过的东西却拿来面试,很郁闷。为了搞定面试还是要把漏洞给补上。 用赌博解投硬币问题:http://www.matrix67.com/blog/archives/3638 投硬币问题的复杂分析:http://www.cnblogs.com/atyuwen/archive/2010/09/1... 阅读全文
posted @ 2012-09-19 10:55 紫红的泪 阅读(613) 评论(0) 推荐(0) 编辑
摘要:题意是生成N位长的格雷码。格雷码是一种二进制的数值表示方法,两个连续值只有1位不同。例如,输入n=2,返回[0, 1, 3, 2]。对应的格雷码是这样的: 00 - 001 - 111 - 310 – 2 vector<int> grayCode(int n) { vector<int> vecRet; stack<int> s; ... 阅读全文
posted @ 2012-09-16 23:25 紫红的泪 阅读(887) 评论(0) 推荐(0) 编辑
摘要:昨儿晚去笔了家公司,然后看到一个环链表转单链表的题。题是这样的,有个环链表,依次把第m个节点删除环链表(约瑟夫环操作)。最后根据节点删除顺序重建为单向链表,并返回。 void reorder(node **head, int m) { // Check param. if (head == NULL || *head == NULL ||... 阅读全文
posted @ 2012-09-13 22:58 紫红的泪 阅读(300) 评论(0) 推荐(0) 编辑
摘要:这个最简单了,就是用一个最大值栈和一个最小值栈来维护最值信息。 template<typename T> class stack_ext : public stack<T> { public: void push(const typename stack<T>::value_type &t) { if (... 阅读全文
posted @ 2012-09-12 10:45 紫红的泪 阅读(267) 评论(0) 推荐(0) 编辑
摘要:实现一个最值队列,要求取最大值、最小值的时间复杂度为O(1)。以前实现最值栈比较多,又因为一个队列可以用两个栈实现,所以最传统的做法是用最值栈实现最值队列。这里用deque实现最值队列,简单高效。 template<typename T> class queue_ext : public queue<T> { public: void pu... 阅读全文
posted @ 2012-09-11 22:40 紫红的泪 阅读(393) 评论(0) 推荐(0) 编辑