随笔分类 -  C++

C++终于熟了
摘要:××公司面试题,看了后没想法,后搜一下发现居然是高中奥数。真无语了,这年头面试官都想干啥呢?!尼玛,这题你自己会做不啊?!平面上n个圆,任意两个都相交,是否有一条直线和所有的圆都有交点。 阅读全文
posted @ 2012-09-26 22:24 紫红的泪 阅读(1137) 评论(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 紫红的泪 阅读(573) 评论(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 紫红的泪 阅读(901) 评论(0) 推荐(0)
摘要:昨儿晚去笔了家公司,然后看到一个环链表转单链表的题。题是这样的,有个环链表,依次把第m个节点删除环链表(约瑟夫环操作)。最后根据节点删除顺序重建为单向链表,并返回。 void reorder(node **head, int m) { // Check param. if (head == NULL || *head == NULL ||... 阅读全文
posted @ 2012-09-13 22:58 紫红的泪 阅读(310) 评论(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 紫红的泪 阅读(279) 评论(0) 推荐(0)
摘要:实现一个最值队列,要求取最大值、最小值的时间复杂度为O(1)。以前实现最值栈比较多,又因为一个队列可以用两个栈实现,所以最传统的做法是用最值栈实现最值队列。这里用deque实现最值队列,简单高效。 template<typename T> class queue_ext : public queue<T> { public: void pu... 阅读全文
posted @ 2012-09-11 22:40 紫红的泪 阅读(400) 评论(0) 推荐(0)
摘要:题意是要求生成匹配的括号结果。假如给定n = 3,需要生成3对括号的有效组合,即"((()))", "(()())", "(())()", "()(())", "()()()"。 void unguarded_generate(vector<string> &result, string curr, int m, int n) { if (m == 0... 阅读全文
posted @ 2012-09-09 13:59 紫红的泪 阅读(3632) 评论(0) 推荐(0)
摘要:题意是给一个未排序的数组,可能包含正数、负数、0。求第一个未出现的正数,例如[1, 2, 0],由于第一个未出现的正数是3,返回3;[3, 4, -1, 1]第一个未出现的正数是2,返回2。算法要求O(n)时间复杂度及常数空间复杂度。 // Stable unguarded_partition, always put t to the left side. // I... 阅读全文
posted @ 2012-09-09 13:21 紫红的泪 阅读(1962) 评论(0) 推荐(0)
摘要:题意是求俩字符串的编辑距离,编辑定义有三种1、插入字符 2、删除字符 3、替换字符。 int minDistance(string word1, string word2) { if (word1.size() == 0) return (int)word2.size(); if (word2.size() == 0) return (... 阅读全文
posted @ 2012-09-09 10:59 紫红的泪 阅读(607) 评论(0) 推荐(0)
摘要:题意是计算a/b,其中a、b均为int,结果也要int。但是计算不允许使用乘法、除法、取模运算。 class Solution { public: // Divide two unsigned int once, using binary divide method. unsigned int unsigned_divide_on... 阅读全文
posted @ 2012-09-08 16:20 紫红的泪 阅读(1917) 评论(0) 推荐(0)
摘要:题意是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 紫红的泪 阅读(1979) 评论(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 紫红的泪 阅读(9579) 评论(3) 推荐(1)
摘要:题意是有个高度数组,就相当于隔板的高度,求数组中任意两隔板间盛水的最大量。隔板间的距离与较低隔板的高度乘积即为盛水的容量。 int maxArea(vector<int> &height) { int capability = 0; size_t left = 0, right = height.size() - 1; ... 阅读全文
posted @ 2012-09-05 11:00 紫红的泪 阅读(9919) 评论(0) 推荐(1)
摘要:实际上是个宝石迷阵消除游戏的简化版,把不同颜色的宝石看成不同值的数字,然后连通超过三个的可以消除。这里没有加入消除后降落的机制,一定程度上简化了问题的复杂度。那种需要每次消除后都从头遍历…… #include <iostream> using namespace std; template<typename T> T &val(T *... 阅读全文
posted @ 2012-09-04 23:20 紫红的泪 阅读(4046) 评论(0) 推荐(0)
摘要:面试到了一个topk,这个原理很简单,但是以前很少写过。面试时写的有点小慢,没有达到行云流水的地步。于是回来再写一遍练练。其中,堆排序部分采用简明排序代码。用完整的TopK代码: #include <iostream> #include <algorithm> using namespace std; template<typenam... 阅读全文
posted @ 2012-09-04 22:13 紫红的泪 阅读(9097) 评论(0) 推荐(0)
摘要:今天跟同学讨论面试题,又提到这个题了。之前在论坛里有人说是MSRA用过的面试题。题是这样的,假设有1棵二叉树,已知这棵树的节点上不均匀地分布了若干石头,石头数跟这棵二叉树的节点数相同。石头只能在子节点和父节点之间搬迁,每次只能搬运一块石头。请问如何以最少的步骤将石头搬运均匀,使得每个节点上的石头刚好为1。 我想到的是用后根遍历解,除了递归不需要额外空间,时间复杂度O(n)。 ... 阅读全文
posted @ 2012-09-02 17:51 紫红的泪 阅读(612) 评论(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 紫红的泪 阅读(346) 评论(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 紫红的泪 阅读(1214) 评论(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 紫红的泪 阅读(1296) 评论(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 紫红的泪 阅读(1481) 评论(0) 推荐(0)