数据结构
文章平均质量分 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 · 842 阅读 · 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 · 1602 阅读 · 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 · 1754 阅读 · 0 评论 -
memset之使用陷阱挖掘二维数组组织方式
二维数组的一个问题,第一维可以不定,第二维必须指定,例如原创 2014-06-18 15:13:14 · 1110 阅读 · 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 · 3044 阅读 · 0 评论 -
初始vector为空,那么push_back N次时间复杂度多少
总结:好像没有设置vector的capabilities的方法,都是系统自动分配的。所以如果一开始设置容量下的话,一直resize,搬元素效率很低。具体未必为两倍,如果当成两倍的话。题目解答:如果初始vector为空,那么push_back N次时间复杂度多少? 假设容量每次是之前两倍的扩充的话,实际我测VS2010好像不是两倍的,就拿1,2,3.。。10这么算,容量扩充序列是1,原创 2014-07-12 16:00:01 · 2826 阅读 · 0 评论 -
贪心算法证明的回忆
关于贪心选择证明的理解,突然youdian原创 2014-06-22 12:24:04 · 1183 阅读 · 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 · 1174 阅读 · 0 评论 -
stream getline相关的总结
ifstream 和 istringstream都继承自 istream, 所以string类的getline(istream&, )函数原创 2014-06-21 02:20:31 · 1058 阅读 · 0 评论 -
由编程珠玑字符串倒置问题拓展到split之C\C++实现
一道字符串倒置的题目,不是全部倒置,而是每个单词倒置,单词之间顺序不变。这道题目应该是很经典的,好多次看到,包含编程珠玑的案例,典型的O(n)算法,每个word倒置,再整个string倒置。这次要上战场了,却发现C C++的 字符串函数不熟练了,最近写的都是Java,一个Split函数爽到爆,于是决定要吧C C++的常用字符串函数过一遍,并对各种方法实现,此处总结下Sp原创 2014-06-12 22:26:35 · 1400 阅读 · 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 · 856 阅读 · 0 评论 -
strstr
strStr 我压根就不知道有这么个奇葩函数,好像是z原创 2014-06-16 16:10:26 · 941 阅读 · 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 · 1248 阅读 · 0 评论 -
TwoSum
这道题目粗看不难,可以直接勇哥li原创 2014-06-15 21:16:32 · 658 阅读 · 0 评论 -
二叉排序树之递归陷阱
判是否是二叉排序树,看似feic原创 2014-06-17 23:31:12 · 904 阅读 · 0 评论 -
部分随机算法之小结
这篇博客总结下sumnous 大神 博客的sui原创 2014-06-19 10:32:37 · 958 阅读 · 0 评论 -
矩阵清0
分析一道水题,我也就刷刷这种题了。。。将矩阵0元所在原创 2014-06-17 22:47:58 · 1026 阅读 · 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 · 1312 阅读 · 0 评论 -
KSum到子集和问题
今天看到July博客扩展KSum问题或占到原创 2014-06-19 23:37:15 · 1108 阅读 · 0 评论 -
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 · 567 阅读 · 0 评论 -
逻辑代码题
判断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 · 790 阅读 · 0 评论 -
Basic Caculator
Basic caculator这题有几种思路,都不是很简单,这就是为啥计算机喜欢用波兰和你波兰,因为求值非常简单,已经体现了运算符优先级了。1. 运算符优先级表,非常麻烦,需要n*n的表格2. 用火车调度场算法将中缀边后缀,dijstra发明的,算法细节多,不容易写对3. 下面的算法,前提是只有+-()class Solution {public:原创 2015-07-21 21:37:50 · 647 阅读 · 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 · 848 阅读 · 0 评论 -
判断图是否是二分图
之前GCJ2014practice遇到过,当时推我google的liuchenheng大神说这个是最基础的题,如果不会,就别来面了。我还真不会,可见有多弱。然后EMC summer campus时遇到USTC的李晨讯,看到输入,我一看就知道这题,他说他也写了半天才A的。看来这种基础题需要熟练了,不仅要写出来,而且要快!https://code.google.com/co原创 2015-07-19 18:32:15 · 714 阅读 · 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 · 1137 阅读 · 1 评论 -
题目
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 · 597 阅读 · 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 · 587 阅读 · 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 · 1056 阅读 · 0 评论 -
统计学习第一发
博神,著名机器学习专家,擅长各种优化问题,求导,内容包括三块:1. 统计学习问题2. 感知机3. SVM原创 2015-06-14 21:16:13 · 682 阅读 · 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 · 1068 阅读 · 0 评论 -
最大子数组和新的解法-前缀和
今天看了曹博的动态规划视频,发现又有一种新的解法。算一个前缀和,presum[], 这是常有的空间优化时间,计算一个子数组和的常有方法然后维护一个sum[0...i-1]的最小值,然后和sum[i]减,就是以a[i-1]为尾元素的子数组和的最大值时间ON,空间O1class Solution {public: int maxSubA原创 2015-06-12 09:53:49 · 1195 阅读 · 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 · 782 阅读 · 0 评论 -
BST数据结构题
给定BST,修改BST,使得每个点都是大于他的结点的值之和关键是这题递归参数怎么设计,每个点比他大的有两快,一个是右子书(如果有的话),另一个是祖先里面比他大的,如果直接用这两个的话,找不到递归结构。应该设计第一个参数是祖先比他大的节点和,第二个参数是子树的和,包括自身。struct Node{ int val; Node* left, *right;};cla原创 2015-06-30 10:44:03 · 969 阅读 · 1 评论 -
July大神交大读书会子atoi
犹记得July大大在今年交大一次读书会上让大家10min写这个算法,然后讲解这个算法,我是通过百度网盘的视频看的,我10min没写出来,而且还是在输出exception case的几次提示下才AC掉的,而且关于需求分析还差了cplusplus的说明= =今天写了这个函数,一开始想估计有千万种情况考虑,但是细细一想,其实也是可以枚举出来的,关键就是逻辑要能处理所有的case,我已开始原创 2014-06-15 22:47:11 · 1611 阅读 · 1 评论 -
climb stair或fibonacci数
今天偶然看到之前的climb stair题,这种died转载 2014-06-17 15:26:18 · 850 阅读 · 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 · 1541 阅读 · 2 评论 -
找唯一不出现三次而出现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 · 1400 阅读 · 0 评论 -
Linklist O(nlogn) sort
O(nlogn)属于性能较优的排序算法,但是用在链表确实要注意很多,它不支持高效的随机访问,所以需要原创 2014-07-03 18:10:48 · 971 阅读 · 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 · 907 阅读 · 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 · 1230 阅读 · 0 评论