摘要: 题意是1-26对应于A-Z,这样一个数字字符串可以解码成只包含A-Z的字符串。例如,12可以解码成AB,也可以解码成L。这样12就有两种解码方式。实现numDecodings(string s)接受数字字符串,返回可以解码的方式数。 int check(char one) { return (one != '0') ? 1 : 0; } ... 阅读全文
posted @ 2012-09-08 11:08 紫红的泪 阅读(1970) 评论(0) 推荐(0) 编辑
摘要: You can do this with the set of features introduced in Windows Phone 7.1 SDK (Mango). Following features will enable you to develop this application: 1- Background agents: You will need to run a piec... 阅读全文
posted @ 2012-09-05 16:27 紫红的泪 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 题意是n=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。依次类推,写个countAndSay(n)函数返回字符串。 string unguarded_convert(const string &say) ... 阅读全文
posted @ 2012-09-05 11:44 紫红的泪 阅读(9541) 评论(3) 推荐(1) 编辑
摘要: 题意是有个高度数组,就相当于隔板的高度,求数组中任意两隔板间盛水的最大量。隔板间的距离与较低隔板的高度乘积即为盛水的容量。 int maxArea(vector<int> &height) { int capability = 0; size_t left = 0, right = height.size() - 1; ... 阅读全文
posted @ 2012-09-05 11:00 紫红的泪 阅读(9907) 评论(0) 推荐(1) 编辑
摘要: 实际上是个宝石迷阵消除游戏的简化版,把不同颜色的宝石看成不同值的数字,然后连通超过三个的可以消除。这里没有加入消除后降落的机制,一定程度上简化了问题的复杂度。那种需要每次消除后都从头遍历…… #include <iostream> using namespace std; template<typename T> T &val(T *... 阅读全文
posted @ 2012-09-04 23:20 紫红的泪 阅读(4011) 评论(0) 推荐(0) 编辑
摘要: 面试到了一个topk,这个原理很简单,但是以前很少写过。面试时写的有点小慢,没有达到行云流水的地步。于是回来再写一遍练练。其中,堆排序部分采用简明排序代码。用完整的TopK代码: #include <iostream> #include <algorithm> using namespace std; template<typenam... 阅读全文
posted @ 2012-09-04 22:13 紫红的泪 阅读(9081) 评论(0) 推荐(0) 编辑
摘要: 今天跟同学讨论面试题,又提到这个题了。之前在论坛里有人说是MSRA用过的面试题。题是这样的,假设有1棵二叉树,已知这棵树的节点上不均匀地分布了若干石头,石头数跟这棵二叉树的节点数相同。石头只能在子节点和父节点之间搬迁,每次只能搬运一块石头。请问如何以最少的步骤将石头搬运均匀,使得每个节点上的石头刚好为1。 我想到的是用后根遍历解,除了递归不需要额外空间,时间复杂度O(n)。 ... 阅读全文
posted @ 2012-09-02 17:51 紫红的泪 阅读(601) 评论(0) 推荐(0) 编辑
摘要: class Solution { public: vector<vector<int> > combine(int n, int k) { vector<int> vecTmp; m_vecRet.clear(); combination(1, n,... 阅读全文
posted @ 2012-09-01 21:08 紫红的泪 阅读(333) 评论(0) 推荐(0) 编辑
摘要: class Solution { public: vector<vector<int> > combinationSum2(vector<int> &num, int target) { vector<int> vecTmp; m_vecRet.clear(); ... 阅读全文
posted @ 2012-09-01 20:43 紫红的泪 阅读(1203) 评论(2) 推荐(0) 编辑
摘要: class Solution { public: vector<vector<int> > combinationSum(vector<int> &candidates, int target) { vector<int> vecTmp; m_vecRet.clear(); ... 阅读全文
posted @ 2012-09-01 19:45 紫红的泪 阅读(1284) 评论(0) 推荐(0) 编辑
摘要: 爬楼梯,就是斐波纳契数列。 // f(n) = f(n - 1) + f(n - 2). // f(1) = 1. // f(2) = 2. int climbStairs(int n) { int a = 1, b = 2; int c = 0; if (n == 1) return a... 阅读全文
posted @ 2012-09-01 17:18 紫红的泪 阅读(1468) 评论(0) 推荐(0) 编辑
摘要: 实现二叉树中序非递归遍历。 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left... 阅读全文
posted @ 2012-09-01 17:10 紫红的泪 阅读(1474) 评论(0) 推荐(0) 编辑
摘要: 两个字符串的字符个数完全相同,这两个字符串是Anagrams。因此Anagrams至少指俩字符串。找出字符集合中的Anagrams组。 vector<string> anagrams(vector<string> &strs) { vector<string> ret; map<string, vector<const string *... 阅读全文
posted @ 2012-08-31 21:53 紫红的泪 阅读(2445) 评论(0) 推荐(0) 编辑
摘要: 两个十进制数,反向存储在单向链表里,每位数占一个节点。求和的链表。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), nex... 阅读全文
posted @ 2012-08-30 21:44 紫红的泪 阅读(2562) 评论(0) 推荐(0) 编辑
摘要: 求数组中和为target的4个数,结果的4个数是非降序,结果集合不能有重复。跟3Sum一样的解法。 vector<vector<int> > fourSum(vector<int> &num, int target) { vector<vector<int> > ret; if (num.size() == 0) ret... 阅读全文
posted @ 2012-08-30 21:21 紫红的泪 阅读(2215) 评论(2) 推荐(0) 编辑
摘要: 找到与target最接近的三个数的和。 int three_sum_closest(vector<int> &num, int target) { int result = 0; int dist = INT_MAX; sort(num.begin(), num.end()); ... 阅读全文
posted @ 2012-08-30 15:17 紫红的泪 阅读(1503) 评论(0) 推荐(0) 编辑
摘要: 求和为指定值的三个数,麻烦的一点是,结果的集合不能有重复的。主要思路有两个,一个是在求值过程中过滤去重,还有一个是用hash。当然不能偷懒直接用set<vector<int> >,这样会直接超时。 // Dedup directly, // LeetCode Judge Large, 272 milli secs. vector<vector<int> > ... 阅读全文
posted @ 2012-08-30 15:00 紫红的泪 阅读(5018) 评论(0) 推荐(0) 编辑
摘要: 逆序数的题最经典的就是求逆序对数,可以直接冒泡然后记录交换的次数,时间复杂度O(n^2)。也可以用修改版的归并排序来做,时间复杂度会降到O(nlogn)。然后,有一种题是有一队人,每个人都知道自己的身高和前面比自己高的人数,队伍解散后怎么才能恢复队伍?这个题给的信息实际上就是逆序对数,根据逆序对数恢复元素位置,我想到的办法是用类似于插入排序的东西来做。下面有实现代码,现根据身高求出每个人前... 阅读全文
posted @ 2012-08-29 17:12 紫红的泪 阅读(748) 评论(0) 推荐(0) 编辑
摘要: 之前有了一些随机采样的面试题,我们知道可以简单地通过Rejection Sampling Method来过滤掉不符合要求的采样值。对于等概率生成0-1的随机函数可以简单地生成均匀正方形采样,然后根据点距坐标原点的距离,把不在单位圆内的采样过滤掉就行了。今天在网上看到一篇文章,介绍了更高端的方法:http://blog.csdn.net/codeboycjy/article/details/... 阅读全文
posted @ 2012-08-29 11:21 紫红的泪 阅读(1007) 评论(0) 推荐(0) 编辑
摘要: 题意是计算两个二进制的字符串的和,返回值依然是个二进制字符串。直接写自然不好搞,于是把整个步骤拆解为两个二进制字符与进位相加。实际上任意类似的加法都可以这样拆解。 // add a and b and carry, return a + b + carry. // carry will be updated when add char. char add_ch... 阅读全文
posted @ 2012-08-25 21:12 紫红的泪 阅读(2444) 评论(0) 推荐(0) 编辑