随笔分类 -  Algorithm & Data Structure

摘要:数组内存连续分配,长度大小固定,内置的最基础的数据结构之一。支持随机访问和随机存储。该类型数据所占内存空间最小。Vector是C++ STL中的一个容器。和数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取(即使用[]操作符访问其中的元素),但由于它的内存空间是连续的... 阅读全文
posted @ 2014-11-20 11:27 IT屁民 阅读(1106) 评论(0) 推荐(0)
摘要:输入任意一个字符串,判断是否为合法IP 1 bool IsIPAddress(const char * str){ 2 //先判断形式是否合法, 3 4 //检查是否只包含点和数字 5 for(int i = 0; str[i] != '\0'; i++){ 6 ... 阅读全文
posted @ 2014-11-19 23:05 IT屁民 阅读(2397) 评论(0) 推荐(0)
摘要:这是一道阿里的面试题。其实算不上新鲜,但是我之前没关注过,如今碰到了,就顺便探讨下这个问题吧:)拿到这个题,首先想到的是直接写出表达式肯定不行,所以有必要从递推入手。由特殊到一般,归纳法么~而且二叉树离不开递推这个尿性。。。先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1如... 阅读全文
posted @ 2014-11-16 22:34 IT屁民 阅读(30541) 评论(0) 推荐(3)
摘要:1. 最长公共子串注意子串是连续的。有下列动态转移方程c[i][j] = c[i-1][j-1] + 1 when X[i] = Y[j]c[i][j] = 0 when X[i] != Y[j] 1 int c[100][100]; 2 3 int LCS(char x[], int len... 阅读全文
posted @ 2014-09-14 22:16 IT屁民 阅读(422) 评论(0) 推荐(0)
摘要:问题描述:给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大这是我前几天参加新浪广告算法组面试的时候一个题目。自己当时脑袋浆糊了,加上前面答的不好,这里答的时候脑子一片空白。哎~这一题本质在于动态规划的运用。至于O(n^3), O(n... 阅读全文
posted @ 2014-06-05 16:33 IT屁民 阅读(822) 评论(0) 推荐(0)
摘要:之前参加阿里巴巴的笔试碰到一最大网络流的题目。因为之前没有看过这类算法,所以还是自然没做出。今天抽空看了看。了解了下基本概念和求解流程。这里简单总结下。主要内容来自百度文库某ppt。在每幅图片的下面我会给出一些说明性文字。本图示最大流的一个实例。由此,可以引出最大流的一些基本的定义和概念可以这样看,... 阅读全文
posted @ 2014-05-27 17:04 IT屁民 阅读(22490) 评论(0) 推荐(6)
摘要:题目不多说了。见https://oj.leetcode.com/problems/word-ladder-ii/这一题我反复修改了两天半。尝试过各种思路,总是报TLE。终于知道这一题为什么是leetcode上通过率最低的一道题了,它对时限的要求实在太苛刻了。在我AC版本代码的前一个版本,最好也就过了... 阅读全文
posted @ 2014-05-23 21:46 IT屁民 阅读(10773) 评论(1) 推荐(2)
摘要:leetcode上刷题。碰到一题实现LRU算法的题目。LRU,Least recently used。是一种常见的cache和页面替换算法。算法和原理可以参阅相关wiki。leetcode上的这一题,时间要求很苛刻,如果达不到O(1)复杂度的话,基本上会TLE。所以,这一题如果用C++来解的话,需要... 阅读全文
posted @ 2014-05-20 11:08 IT屁民 阅读(512) 评论(0) 推荐(0)
摘要:最近这不准备面试么。看了些关于海量数据处理的相关面试题。网上比较有名的就是csdn的july大哥的秒杀99%海量数据那篇文章。的确是大大的干货。但是,个人感觉排版条理似乎不是那么清晰。故在看完july的全文后,我自己在此做个总结吧。这里,我们不谈例题,只谈思想和使用原则,下文以问答的方式进行总结。方... 阅读全文
posted @ 2014-05-13 17:28 IT屁民 阅读(699) 评论(0) 推荐(0)
摘要:最近很忙,是在木有时间上来写技术博客了。人又变懒了啊~今天抽点时间,上来讨论一道google的面试题吧~题目是:给你一个数组 A [ 1 .. n ] ,请你在 O ( n ) 的时间里构造一个新的数组 B [ 1 .. n ] ,使得 B [ i ] = A [ 1 ] * A [ 2 ] * ... * A [ n ]/A [ i ] 。你不能使用除法运算。思路和解答:这一题实则很简单。有过基本编程思维训练的人都知道,降低时间复杂度,肯定会在空间上有所牺牲。并且,这种类型的题目,最重要的就是要避免重复计算,即必须用额外的空间来储存已经计算得到的记过。这点和尾递归的优化以及动态规划思想有类似 阅读全文
posted @ 2011-09-08 10:46 IT屁民 阅读(317) 评论(0) 推荐(0)
摘要:1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <ctype.h> 5 #include <stack> 6 usingnamespace std; 7 8 stack<float> OperandStack; 9 stack<char> OperatorStack; 10 11 char priority[]={'(', ')', '', '+' 阅读全文
posted @ 2011-08-18 23:01 IT屁民 阅读(766) 评论(0) 推荐(1)
摘要:#include <stddef.h>注意:对于指针型形参,一定要判断是否为空,一面地址越界!char * ___strtok = NULL;//复制char * strcpy(char * dest,const char *src){ if ((strDest==NULL)||(strSrc==NULL)) throw "Invalid argument(s)"; char *tmp = dest; while ((*dest++ = *src++) != '\0') /* nothing */; return tmp;}//最多复制前coun 阅读全文
posted @ 2011-07-02 22:55 IT屁民 阅读(341) 评论(0) 推荐(0)
摘要:这是今天无意看到的一个字符串处理小问题。详细点说,假设有这么一个字符串char str[]=" hello world !! ! "现在需要实现一个算法ClearSpace来去除这个字符串中的所有空格。即最后的str应为"helloworld!!!"函数声明如下void ClearSpace(char *str)要求:不用其他变量,只能用形参str。也不准用正则表达式。其实这个算法还有些深度。不用些巧妙的方法似乎很难解决。刚刚拿到这个问题的时候,大部分人都会这么思考:要去掉空格,就是找到空格的位置,然后将后面的字符整体往前移动以填补这些个空格。但是关键在 阅读全文
posted @ 2011-07-02 22:46 IT屁民 阅读(2543) 评论(1) 推荐(0)