- 博客(101)
- 资源 (2)
- 收藏
- 关注
原创 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
855
原创 Alien Order
https://leetcode.com/problems/alien-dictionary/单词按照一定次序排序,推导出原始顺序,典型的toposort,非常好的题目和重要的算法。还是习惯炒肉说的基于indegree的bfs,学神的dfs总觉得别扭。当年老师教的静态链表太差了,太麻烦我写了两种写法,再生成图的时候,一种是从比较上下两个单词的第一次不同的单词来生
2015-08-30 20:15:44
763
原创 逻辑代码题
判断a2*b2 和 a3* b3 是否可以装入a1*b1逻辑代码基本功,漏考虑了一点,两种形状都要考虑,而不是如果大小符合第一种,就不考虑第二种形状了,导致WA了,也没有人hack我,估计hack了,也难想到错误int can(int a1, int b1, int a2, int b2){ return (a1<=a2 && b1<=b2) || (a
2015-07-23 08:11:01
807
原创 Leetcode新题
算一个数组里面k个元素的滑动窗口的最值单调队列 不同于单调栈单调队列模板题class Solution {public: vector maxSlidingWindow(vector& a, int k) { vector ans; int n=a.size(), i; deque> q; if(!k) retu
2015-07-23 00:41:21
579
原创 Basic Caculator
Basic caculator这题有几种思路,都不是很简单,这就是为啥计算机喜欢用波兰和你波兰,因为求值非常简单,已经体现了运算符优先级了。1. 运算符优先级表,非常麻烦,需要n*n的表格2. 用火车调度场算法将中缀边后缀,dijstra发明的,算法细节多,不容易写对3. 下面的算法,前提是只有+-()class Solution {public:
2015-07-21 21:37:50
657
原创 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
856
原创 判断图是否是二分图
之前GCJ2014practice遇到过,当时推我google的liuchenheng大神说这个是最基础的题,如果不会,就别来面了。我还真不会,可见有多弱。然后EMC summer campus时遇到USTC的李晨讯,看到输入,我一看就知道这题,他说他也写了半天才A的。看来这种基础题需要熟练了,不仅要写出来,而且要快!https://code.google.com/co
2015-07-19 18:32:15
728
原创 刻录镜像
目测UltraISO软件不升级 导致Ubuntu14.04写入失败,只有EFI文件夹升级一下Ultraiso 就好了 我用universal installers似乎启动之后光标一直跳看来还是有时候需要升级软件
2015-07-12 23:41:37
639
原创 题目
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
611
原创 数据流的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
596
原创 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
1066
原创 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
1149
1
原创 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
795
原创 BST数据结构题
给定BST,修改BST,使得每个点都是大于他的结点的值之和关键是这题递归参数怎么设计,每个点比他大的有两快,一个是右子书(如果有的话),另一个是祖先里面比他大的,如果直接用这两个的话,找不到递归结构。应该设计第一个参数是祖先比他大的节点和,第二个参数是子树的和,包括自身。struct Node{ int val; Node* left, *right;};cla
2015-06-30 10:44:03
977
原创 学车走模拟考场
周五走了模拟考场,最后一遍通过,前三遍各种大问题。三个地方打方向,启动,侧方位出库,坡道定点。教练车加坐垫。先打灯。左拐。侧方位特别当心的是突起 对齐 箭头左端左侧1-2cm处,前面一个较难,因为需要突然拐弯调整,一定要更加慢速。注意右侧后视镜与白线30cm左右,川字形状。然后肩膀与蓝线白线对齐。同时还可以看左侧车门线与白线对齐。
2015-06-20 08:51:53
818
原创 科目二实践笔记
启动要打左转向灯(向下),防止跳转,左手按住,右手方向盘侧方位停车右转到侧方位停车(注意自己是抽签到哪个车队就是哪个车。这里面两个不是任意选,而是必须严格按照编号来。如果分到前面的话,就要提前准备好,对齐突起)车辆左右小修,指到突起对齐箭头左侧(这里如果是没有做垫,需要箭头左侧靠左l2cm, 然后车头过了箭头,)然后左侧看黄线,或者蓝线,对齐
2015-06-18 21:37:19
846
原创 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
1082
原创 算素因子种类数个个数的题目
素因子种类数:对于一个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
1781
原创 最大子数组和新的解法-前缀和
今天看了曹博的动态规划视频,发现又有一种新的解法。算一个前缀和,presum[], 这是常有的空间优化时间,计算一个子数组和的常有方法然后维护一个sum[0...i-1]的最小值,然后和sum[i]减,就是以a[i-1]为尾元素的子数组和的最大值时间ON,空间O1class Solution {public: int maxSubA
2015-06-12 09:53:49
1212
原创 条件熵定义推导公式
http://ccckmit.wikidot.com/st:mutualinformation 这篇博客非常不错,深入浅出,李航的似乎 没有讲清楚
2015-06-09 16:20:09
11056
1
原创 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
1772
原创 初始vector为空,那么push_back N次时间复杂度多少
总结:好像没有设置vector的capabilities的方法,都是系统自动分配的。所以如果一开始设置容量下的话,一直resize,搬元素效率很低。具体未必为两倍,如果当成两倍的话。题目解答:如果初始vector为空,那么push_back N次时间复杂度多少? 假设容量每次是之前两倍的扩充的话,实际我测VS2010好像不是两倍的,就拿1,2,3.。。10这么算,容量扩充序列是1,
2014-07-12 16:00:01
2847
原创 通俗理解TCP握手次数是三次?
理解之后,应该说是至少三次就可以保证可靠传输了。看到网上一篇帖子http://www.cnblogs.com/TechZi/archive/2011/10/18/2216751.html是这么说的,“我Google该问题答案后发现,网络上对于“三次握手”的过程都有很详细的描述,但对于为什么需要“三次握手”来建立连接却没有很好的答案。只能求助于书本了。”后面有谢希德树和另一本书的
2014-07-08 17:08:27
1528
原创 找唯一不出现三次而出现1次的数子O(n)位运算算法
之前两次那个是异或运算处理,这次以为也是类似,但是没想出来。高富帅想出来了算法,转为bitset,然后加起来 相同的话 要么0+0+0 要么1+1+1,最后剩下的 可以通过%3 算出0 或1,思想是这样,其实也是bit运算,只不过不是异或这种一次运算O(1)这种,但是由于输入是int数组,-2^31~2^31-1 所以用32bit就可以表示了。之前遇到,过几次错误,包括分配存储
2014-07-06 20:46:55
1407
原创 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
914
原创 Linklist O(nlogn) sort
O(nlogn)属于性能较优的排序算法,但是用在链表确实要注意很多,它不支持高效的随机访问,所以需要
2014-07-03 18:10:48
984
原创 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
1245
原创 cpp coding随笔
最近非常代码郁闷,遇到各种不顺心。写个Huffman,想用二叉树实现,之前的构造二叉树都完成了,当时还记得夏令营之后和赵王军Acmer交流了一下,他都不用这种notorious的指针,因为总会出bug,就因为null还有一些过于涉及底层,需要coder去考虑的事情。他用index模拟point,于是我也照做,里面就是n-1次loop,一次要排序,非全部参与的排序,然后删除两个最小,插入
2014-07-02 23:15:32
951
原创 微博估计要火一阵的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
1562
原创 图算法时空复杂度分析及重定向
关于图的DFS的时间复杂度分析:DFS是递归函数,一共调用n次,n为定点数,每次访问其对应的临界点,设为ei若是临界表,因为循环遍历list。总的基本操作次数 n+sum(e1+...en)=n+e, 故O(n+e)若是matrix,因为遍历一行,找非-1,且未visit,所以(n+1)*n=n^2+n,投O(n^2)拓扑排序里面,经过静态链栈优化后,邻接表为O(n+e),
2014-06-28 14:35:44
1445
原创 并查集
int Find(int i){ if(i>=setssize) return error i; while(tree[i]!=-1) i=tree[i]; return i;}int CollapsFind(int i){ if(i>=setssize) return error i; int queryi=i;//modified in finding parent
2014-06-27 18:18:06
790
原创 TopoSort 实现之不用高端静态链栈算法
今天理解了终于写了TopoSort,感觉当年DS学的静态链栈实在坑爹,而且麻烦,好像和我的本质没有太大的区别哦。时间复杂度O(n+e)其实和O(n^2)是邻接矩阵和临界表的区别。我的理解就是其实好像循环N次,{每次先找任意一个入度为0的点,然后从图中删除}。思路非常简单,但是coding实现还是有很多变化,我已开始不用indegree,直接matrix写了一个O(n^3)的,就是不断在ma
2014-06-27 14:09:14
949
原创 多重loop之 continue break设计
今天看到msdn一个找满足所有criterion的item,找到则返回一个,总结了多重循环程舍continue的设计 ,挺有意思for(item){ for(criterion) { if(!item.ismetby(criterion)) { next item loop//as one criterion not met, while continue can
2014-06-25 11:12:05
986
原创 DP 算法总结
01背包也是之前联系过的,最长公共子序列(和最短编辑举例一类),还有石子合并问题(本质是矩阵链乘法一类的)今天写了一下最长公共子序列,发现了问题,我习惯了用string于是用这个容器来装字符序列,然后就出现了问题。代码ac,递推方程必须全队,包括条件,下标。因为子串长度问题,必须m+1 n+1空间,in位长度1和j的lcs可能借助长度0和长度j的lcs,因此定义c(0,j)
2014-06-24 15:41:25
1342
原创 回溯法 或dfs 或深度优先 题总结
回溯法总结一道数字到字符串的题,将数字映射到手机的字符串上,是编程之美版本的简略版,简明的DFS,其实我更愿意用backtrack framework来做,说成是回溯法,本质没有区别vector numtoletter;void f(vector& strvec, int selectn, int n,string digits, vector numtoletter, vector&
2014-06-23 22:18:50
1005
asp.net网站-网聚社会员管理系统
2012-02-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人