面试算法
文章平均质量分 60
richardzrc
这个作者很懒,什么都没留下…
展开
-
remove ele when iterative hashmap
C++ 遍历hashmap时候删除元素是很痛苦的,Java有concurrent hashmap, C++auto : 似乎用不了,只能采用erase获取next iterator的方法,因此这种方法尽量加一个元素来标记元素是否删除更好,看到C++的不好地方了bool dfs(int i){ if(v[i]) return 0; v[i]=1; for(au原创 2015-08-30 21:28:30 · 831 阅读 · 0 评论 -
stream getline相关的总结
ifstream 和 istringstream都继承自 istream, 所以string类的getline(istream&, )函数原创 2014-06-21 02:20:31 · 1045 阅读 · 0 评论 -
贪心算法证明的回忆
关于贪心选择证明的理解,突然youdian原创 2014-06-22 12:24:04 · 1175 阅读 · 0 评论 -
deque 与vector区别
什么是新的? 细读上面两张表格,你会发现和vector比较这里增加了两个函数。 1、c.push_front(elem) —— 在头部插入一个数据。 2、c.pop_front() —— 删除头部数据。 调用方法和c.push_back(elem)和c.pop_back()相同,这些将来会告诉我们对于deque> 会非常有用,deque可以在前后加入数据。>原创 2014-06-18 22:55:53 · 1162 阅读 · 0 评论 -
由编程珠玑字符串倒置问题拓展到split之C\C++实现
一道字符串倒置的题目,不是全部倒置,而是每个单词倒置,单词之间顺序不变。这道题目应该是很经典的,好多次看到,包含编程珠玑的案例,典型的O(n)算法,每个word倒置,再整个string倒置。这次要上战场了,却发现C C++的 字符串函数不熟练了,最近写的都是Java,一个Split函数爽到爆,于是决定要吧C C++的常用字符串函数过一遍,并对各种方法实现,此处总结下Sp原创 2014-06-12 22:26:35 · 1392 阅读 · 0 评论 -
数组建堆时间复杂度分析
关于堆数据结构的时间复杂度分析有点疑问,一直没想清楚为啥是线性的,这次把算法导论里求得思想和大家分享下~~这里讨论的都是二叉树!算法导论假定array 是1开始的 已知a[1..n]假定叶子高度为0,根高度为树高度?O(nlogn)void CreatHeap(int* a, int n){for i=[logn]->1//logn 次loo原创 2014-04-20 18:40:56 · 3027 阅读 · 0 评论 -
初始vector为空,那么push_back N次时间复杂度多少
总结:好像没有设置vector的capabilities的方法,都是系统自动分配的。所以如果一开始设置容量下的话,一直resize,搬元素效率很低。具体未必为两倍,如果当成两倍的话。题目解答:如果初始vector为空,那么push_back N次时间复杂度多少? 假设容量每次是之前两倍的扩充的话,实际我测VS2010好像不是两倍的,就拿1,2,3.。。10这么算,容量扩充序列是1,原创 2014-07-12 16:00:01 · 2805 阅读 · 0 评论 -
回顾基本01背包问题
今天练了一下当年的背包问题,发现居然OJ还没过,赶紧刷一下。想到当年,每次做背包,就和军爷一起回忆Eason的你的背包,从此变得好浪漫~~~~~题目太经典了,分析就略过了。写个递推方程:c[i,j]=max{c[i,j-1], c[i-1,j-w[i]+v[i]]} if BagWeight>=j>=w[i] =c[i,j-1] if jc[1,j]={0原创 2014-06-19 20:20:09 · 848 阅读 · 0 评论 -
strstr
strStr 我压根就不知道有这么个奇葩函数,好像是z原创 2014-06-16 16:10:26 · 918 阅读 · 0 评论 -
n个整数数组返回n-1个乘积最大值
一道某公司的笔试题,int*a[]1..n 帧数数组, 求n-1个数的乘积的最大值。只能用乘法,不用除法。用除法就太简单了,全部连乘,然后逐个除,注意判断有0的,遍历就最大。第一眼反应分类讨论,按照逻辑来分:1) 有0的话, 若>=2个0, return 0;=1个0, 剩余奇数个负数,return 0,偶数个,余下乘积2) 无0的话,n为奇,若奇个负数,去掉最大负数,偶个原创 2014-06-19 14:51:04 · 1237 阅读 · 0 评论 -
TwoSum
这道题目粗看不难,可以直接勇哥li原创 2014-06-15 21:16:32 · 651 阅读 · 0 评论 -
微博估计要火一阵的SleepSort之Shell及C实现
今日在微博看到如此神奇的代码,居然还有新的sort算法,对于我这种渣渣必须研究一下,代码如下:#!/bin.bashfunction f(){ sleep "$1" //sleep 这么多ms echo "$1"}while [ -n "$1" ] //第一个参数不为空do f "$1" & //后台运行,相当于fork一个进程去执行f, 父进程同原创 2014-06-29 15:24:01 · 1533 阅读 · 2 评论 -
部分随机算法之小结
这篇博客总结下sumnous 大神 博客的sui原创 2014-06-19 10:32:37 · 951 阅读 · 0 评论 -
通俗理解TCP握手次数是三次?
理解之后,应该说是至少三次就可以保证可靠传输了。看到网上一篇帖子http://www.cnblogs.com/TechZi/archive/2011/10/18/2216751.html是这么说的,“我Google该问题答案后发现,网络上对于“三次握手”的过程都有很详细的描述,但对于为什么需要“三次握手”来建立连接却没有很好的答案。只能求助于书本了。”后面有谢希德树和另一本书的原创 2014-07-08 17:08:27 · 1501 阅读 · 0 评论 -
二叉排序树之递归陷阱
判是否是二叉排序树,看似feic原创 2014-06-17 23:31:12 · 889 阅读 · 0 评论 -
矩阵清0
分析一道水题,我也就刷刷这种题了。。。将矩阵0元所在原创 2014-06-17 22:47:58 · 1012 阅读 · 0 评论 -
memset之使用陷阱挖掘二维数组组织方式
二维数组的一个问题,第一维可以不定,第二维必须指定,例如原创 2014-06-18 15:13:14 · 1090 阅读 · 0 评论 -
July收集荷兰国旗问题之三路partition
这道题目和分成两块的partition的扩展,例如有一堆0 1 2 数字组成的数组,要分成 00 00 11 1 1 222 2这种顺序的。利用lumoto版的partition可以很好的解决,比hoare好多了,而且直接利用loop invariant,变成i j k三个指针,[low,i]=0 [i+1,j]=1, [j+1,k-1]=2, 里面如果新来2的话,直接k++,原创 2014-07-20 10:44:45 · 1730 阅读 · 0 评论 -
二叉树先序中序后序非递归算法
一直想要写的 二叉树 中序 先序 后序遍历算法递归的太简单了,就不写了。关键是非递归版本。先序:我自己的版本:void RootPreTraverse(Node* p){ Stack S; while(S not empty) { p=S.top(); S.pop(); Show(p); if(p->right!=null) S原创 2014-06-04 23:19:07 · 1596 阅读 · 0 评论 -
Alien Order
https://leetcode.com/problems/alien-dictionary/单词按照一定次序排序,推导出原始顺序,典型的toposort,非常好的题目和重要的算法。还是习惯炒肉说的基于indegree的bfs,学神的dfs总觉得别扭。当年老师教的静态链表太差了,太麻烦我写了两种写法,再生成图的时候,一种是从比较上下两个单词的第一次不同的单词来生原创 2015-08-30 20:15:44 · 728 阅读 · 0 评论 -
vector<string>
给定vector 判断是否是 可以首尾相连成一个环,相邻两个串的头和尾字符一样class Solution{ public: int n; vector v; vector vs_; unordered_map> um; bool Circle(vector vs){ int save=0; for(int原创 2015-07-20 23:39:50 · 838 阅读 · 0 评论 -
判断图是否是二分图
之前GCJ2014practice遇到过,当时推我google的liuchenheng大神说这个是最基础的题,如果不会,就别来面了。我还真不会,可见有多弱。然后EMC summer campus时遇到USTC的李晨讯,看到输入,我一看就知道这题,他说他也写了半天才A的。看来这种基础题需要熟练了,不仅要写出来,而且要快!https://code.google.com/co原创 2015-07-19 18:32:15 · 700 阅读 · 0 评论 -
数据流的median
http://www.lintcode.com/en/problem/data-stream-median/数据流的中位数,两个优先队列,或者两个堆,题目定义是靠前的一个数为medianstruct Node1{ int val; bool operator<(Node1 n) const{ return val<n.val; }};stru原创 2015-07-06 23:54:47 · 580 阅读 · 0 评论 -
woodcut
http://www.lintcode.com/en/problem/wood-cut/#二分答案,贪心验证,具有单调性class Solution {public: /** *@param L: Given n pieces of wood with length L[i] *@param k: An integer *return原创 2015-07-06 22:28:02 · 1046 阅读 · 0 评论 -
题目
Question 2. Find distance between two given keys of a Binary Tree, no parent pointers are given. Distance between two nodes is the minimum number of edges to be traversed to reach one node from other.原创 2015-07-07 00:12:04 · 586 阅读 · 0 评论 -
power of two
power-of-twoclass Solution {public: bool isPowerOfTwo(int n) { return n>=1 && !(n&(n-1)); }};n=10000***000, n&(n-1)=0是这个方法的核心原创 2015-07-06 21:00:09 · 1122 阅读 · 1 评论 -
hackerrank maxsum mod
https://www.hackerrank.com/challenges/maximise-sum/submissions/code/12028158hackerrank 子数组和模m的最大值时间复杂度nlgn, 主要是证明一点,presum[i]-presum[j] 对于0原创 2015-06-14 21:46:03 · 1050 阅读 · 0 评论 -
算素因子种类数个个数的题目
素因子种类数:对于一个n,他的素因子总类数 有多少? Facebook Hackercup Round1 Homework题,10pts运用筛法,然后P[j]=i ->P[j]++int GetPrimeFactorTypeTimes(int n){ memset(P , 0, sizeof P); for(int i=2;2*i<=n;i++)原创 2015-06-14 01:13:11 · 1757 阅读 · 0 评论 -
统计学习第一发
博神,著名机器学习专家,擅长各种优化问题,求导,内容包括三块:1. 统计学习问题2. 感知机3. SVM原创 2015-06-14 21:16:13 · 673 阅读 · 1 评论 -
最大子数组和新的解法-前缀和
今天看了曹博的动态规划视频,发现又有一种新的解法。算一个前缀和,presum[], 这是常有的空间优化时间,计算一个子数组和的常有方法然后维护一个sum[0...i-1]的最小值,然后和sum[i]减,就是以a[i-1]为尾元素的子数组和的最大值时间ON,空间O1class Solution {public: int maxSubA原创 2015-06-12 09:53:49 · 1183 阅读 · 0 评论 -
Jump gameII
leetcode jump gameII看了题解,用BFS是比较好的思路,一层表示当前步能到的节点,curmax表示最远的,和贪心有异曲同工之妙class Solution {public: int jump(vector& a) { int n=a.size(); if(n<=1) return 0; int i=0, level原创 2015-07-01 09:00:00 · 773 阅读 · 0 评论 -
July大神交大读书会子atoi
犹记得July大大在今年交大一次读书会上让大家10min写这个算法,然后讲解这个算法,我是通过百度网盘的视频看的,我10min没写出来,而且还是在输出exception case的几次提示下才AC掉的,而且关于需求分析还差了cplusplus的说明= =今天写了这个函数,一开始想估计有千万种情况考虑,但是细细一想,其实也是可以枚举出来的,关键就是逻辑要能处理所有的case,我已开始原创 2014-06-15 22:47:11 · 1597 阅读 · 1 评论 -
KSum到子集和问题
今天看到July博客扩展KSum问题或占到原创 2014-06-19 23:37:15 · 1094 阅读 · 0 评论 -
DP 算法总结
01背包也是之前联系过的,最长公共子序列(和最短编辑举例一类),还有石子合并问题(本质是矩阵链乘法一类的)今天写了一下最长公共子序列,发现了问题,我习惯了用string于是用这个容器来装字符序列,然后就出现了问题。代码ac,递推方程必须全队,包括条件,下标。因为子串长度问题,必须m+1 n+1空间,in位长度1和j的lcs可能借助长度0和长度j的lcs,因此定义c(0,j)原创 2014-06-24 15:41:25 · 1296 阅读 · 0 评论 -
MergeIntervals
拿到题目,一看,对于两个interva原创 2014-06-16 21:56:59 · 842 阅读 · 0 评论 -
InsertIntervals
这道也是4*题,思路基本和/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {}原创 2014-06-17 15:08:52 · 946 阅读 · 1 评论 -
最大字串和问题 个人剖析
input: int a[1..n], with positive and negative integersoutput: the max sum of continuous integers, if all negative, return 0;O(n^3):(具体计算见最下面)max=0;for starti=1->nfor leni=1->n-i+1sum=原创 2014-04-15 14:38:55 · 803 阅读 · 0 评论 -
linklist Qsort
后来再看题目发现要求是常数空间复杂度,但是实际上void qsort(ListNode* low, ListNode* high){ if(low==high || (high!=NULL&&high->next==low)) return; else { int x=0; ListNode *p=new ListNode(x); p->next=lo原创 2014-07-04 00:59:15 · 897 阅读 · 0 评论 -
TopoSort 实现之不用高端静态链栈算法
今天理解了终于写了TopoSort,感觉当年DS学的静态链栈实在坑爹,而且麻烦,好像和我的本质没有太大的区别哦。时间复杂度O(n+e)其实和O(n^2)是邻接矩阵和临界表的区别。我的理解就是其实好像循环N次,{每次先找任意一个入度为0的点,然后从图中删除}。思路非常简单,但是coding实现还是有很多变化,我已开始不用indegree,直接matrix写了一个O(n^3)的,就是不断在ma原创 2014-06-27 14:09:14 · 926 阅读 · 0 评论 -
DP算法之最大字段和 最长单调子序列相似借鉴之处
DP算法最大字段和 a[1...n]找出连续子序列和最大的一个(曹博的PPT里面看到的)DP算法 最长单调递增(递减)子序列 a[1...n]找出未必连续的 最长的 单调递增子序列dp[i]: 表示a[1...i]的最长单调递增子序列,由于是否加一个元素与之前解的最后一个元素大小有关,因此用j记录dp[i-1]的最优解最后一个元素,dp[i]原创 2014-07-03 14:28:55 · 1222 阅读 · 0 评论