- 博客(72)
- 收藏
- 关注
原创 leetcode36
bool isValidSudoku(vector<vector<char>>& board) { const int SIZE = 9; for( int row = 0; row < SIZE; row++ ){ for( int col = 0; col < SIZE; col++ ){ if( board
2016-08-27 18:55:13
712
原创 leetcode009
class Solution {public: bool isPalindrome(int x) { if( x<0 ) return false; int div=1; int low= 0, high = 0; int y=x; while( x/div >= 10 )
2016-08-27 17:28:06
586
原创 用爬虫解决生活问题
前几天有一个妹子让我帮她写一个爬虫。问题背景是有几个产品,每个产品对应一个excel。我要实现的功能是读取产品相关网页上该产品的净值,然后写到Execl中去。问题很简单无非就是正则表达式的读取excel,不过有一点需要注意的是现有的几个python Excel插件功能都不是完善,有的只能读excel不能写,有的能写,能读,但是不能修改(可以理解对文件进行追加操作)。不过有一个最强大但是略为繁琐的工具
2016-08-09 21:59:40
1183
原创 浅谈依赖注入
最近在学习Spring和Angularjs,在学习的过程中依赖注入这个名词反复出现在各个文档和链接当中,迫使你不得不去了解下这个概念。依赖注入(Dependence Injection, DI)又和控制反转(Inversion of Control, IoC)有关。可以说DI是IoC的一种设计模式,按照DI的思路可以实现IoC。 其实这个东西没那么神奇,几句话就能讲清楚的事情。我看了中文的几个资料
2016-07-26 23:08:50
716
原创 C++中的name mangling
我在这里先推荐一下陈硕的那本Linux多线程服务端编程,至于推荐这本书的原因,可以参见我在知乎上的回答。传送门 作者在C++编译链接模型精要章节中提到了name mangling。基本支持函数重载的语言都需要进行name mangling。mangling的目的就是为了给重载的函数不同的签名,以避免调用时的二义性调用。C++程序员需要感谢GNU,GNU BinUtils的工具链用起来实在是太舒服了
2016-05-21 21:31:44
14495
原创 在Linux下配置OpenCV jar
这几天在用java做一个图像处理的东西。自己是按着这个Guide来的(点我点我),上面后面的教程中用到了OpenCV,于是我就着手搭建这个环境了。 我找到了一个opencv的jar包,然后把jar包放到了我的项目里面。然后拷贝了一段demo代码。demo中一句这样的代码 System.loadLibrary( Core.NATIVE_LIBRARY_NAME );这句的功能是加载一个native的
2016-05-10 16:52:38
5211
原创 如何在控制台下画出一个正线曲线
昨晚一个同学在网上找了一段傅里叶变换的代码,但是需要验证代码的正确性。于是就打算生成一个正弦波。他找到了我,代码本身是没有难度的,因为基本任何语言都有math库,库中肯定有三角函数。我当时想,能不能在Windows的控制台下画出一个正弦波。需要解决的问题只有一个,如何控制Console的光标位置。所幸的是,Windows提供了这样的API给我们使用。在windows.h的头文件中,有这样几个函数。H
2016-05-09 19:48:36
1796
原创 emacs24.x自动补全配置
我相信现在几乎没有程序员在用不支持自动补全的编辑器或者IDE。emacs作为神的编辑器自然必须具备这个功能。不过这个功能并不是emacs自带的,需要我们手动配置。网上配置的教程有很多,如果你用的是24以后的版本,那么我的这篇文章可能会对你有所帮助。重要的事情说三遍针对24.x之后的版本针对24.x之后的版本针对24.x之后的版本emacs的自动补全需要下载一个auto-complete的扩展。我在这
2016-04-24 21:50:30
4539
原创 Google Protobuf Guide
首先,这只是一篇Protobuf的Guide,没有任何高级内容。ProtoBuf是什么?我只能说,你写过代码就会明白。它和序列化对象关联很紧密,类似功能的工具很多。如xml Json等都是用来序列化对象的。至于序列化对象是什么?还是那句话,你写过代码就会明白。我的语文不好,不能给大家描述清楚。我个人理解就是把对象存储在文件里。举个简单的例子,我们有一个Person类,表示一个人。如下:class P
2016-04-20 11:51:17
531
原创 一次失败的面试
前几天,承蒙一位大龄哥哥看得起。让我去他所在的一家公司面试,去之前自己就已经定下目标了,坚持和面试官交谈10分钟就算胜利。没想到最后竟然坚持了2个半小时,然而这并没有什么卵用。题目并不难,现在看来,我紧张是我这次失利的一部分原因之外,自己在纸上写代码的能力不足也是一个方面。题目只有三道,有一个是非递归遍历遍历二叉树。这个的确是我写不出来,如果你不提示我用栈或者队列实现的话。剩余的2道都是一个正常的程
2016-04-19 18:39:33
622
原创 leetcode003
问题是找出一串字符串中最长的且没有重复字符的字符串,思路上也很简单。 设数列为: A[123⋯n]A\begin{bmatrix} 1 & 2 & 3 & \cdots & n \end{bmatrix} 设发生重复的位置为pp,重复的字符第一次出现在位置pp处,则有 1≤p<q1 \le p < q 可以证明,下次搜索时只需要搜到p−1p-1处即可,至于证明,用反证法证明即可,很简单。
2016-04-02 16:44:05
441
原创 LeetCode002
传送门/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode*
2016-03-19 18:39:45
492
原创 LeetCode001
传送门class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int temp; vector<int> v; for(int i=0;temp=0,i<nums.size();i++){ temp=nums[i];
2016-03-19 18:37:04
502
原创 new................未完待续
new表达式用于动态创建对象,与此对应用于销毁对象的还有delete exprssion,有点类似于C中的malloc和free吧。 C++primer上说,当使用一条new表达式的时候实际上有三步:创建内存(调用一个 operator new 或 operator new[ ]的库函数),调用构造函数,返回内存地址。这里面能拿出来说的就第一步,调用operator new的库函数。 其实就是一
2016-03-07 19:25:05
380
原创 简单的事情复杂做
昨天要统计下我们班那些人的毕设报告没有交。提交名单是提交在一个excel里,其实可以用excel自带的sort来查一下就行了。不过为了装逼一把,我就打算写个程序来做这件事情。最正常的应该是用cpp来写了,因为我最熟悉这个。不过打算挑战下自己,我就写了四个语言版本的。c++/java/python/go 花时间最多的就是go的版本,感觉go和C差别还是有点大的。其它三个给我的感觉都是C家族语言。代码
2016-03-06 08:09:16
867
原创 反转链表
今天翻了云风大大的微博,看到他说他给应届生出了一道笔试的编程题,结果7 8 个人没有一个能正确地写出来。于是我就试着写了下,不过发现逻辑很简单呀。 //保存后继节点//更改当前结点的next(指向前一个)//设当前结点为前驱节点//设后继节点为当前结点//loop#include #include struct Node;struct Node{ int data; s
2016-03-05 18:14:33
461
原创 用VBA来完成任务
Sub auto()'' auto 宏'Dim ws_src As WorksheetDim ws_dst As WorksheetDim ws_addr As WorksheetDim i As IntegerDim j As IntegerSet ws_addr = ThisWorkbook.Worksheets(4)Set ws_src = ThisWorkbook.
2016-03-05 18:05:43
2521
原创 PAT1013
传送门用DFS搜索一下,然后看需要搜几次,这一步可以得到有多少个独立的区域。设为N,则所需要的高速路数为N-1#include #include using namespace std;const int MAX=1001;int N,M,K;int edge[MAX][MAX];int concern[MAX];int visited[MAX];bool dfs(int
2015-12-13 12:46:14
531
原创 PAT1012
传送门这是一道结构体排序问题,只不过排序的条件有点特别,但是我们可以传一个谓词给函数。还有一个坑就是注意俩人排名相同的情况,比如有两人并列第一,实际上分数第二的人排名就是第三了。/* *********PAT1012***************** *********Author:markliang*********/#include #include #inc
2015-12-13 12:42:58
643
原创 PAT1011
这道题很简单,就不用说了。传送门#include #include #include using namespace std;const int N=3;map m={ {0,'W'}, {1,'T'}, {2,'L'}};struct valAndIndex{ double val; int index;};int main(int argc,char *
2015-12-09 13:25:44
506
原创 PAT1010
这道题是最恶心的一道了,通过率也是最低的一个,只有0.08。是一个进制转换的问题,不过有几个坑需要注意下。第一是数字的位数是不多于10位数,但int不行,所以数据类型必须用long long类型来做。第二个就是进制radix是没有上限的,所以这里需要做好剪枝。用二分传送门#include #include #include using namespace std;typedef
2015-12-09 13:23:46
446
原创 PAT甲级1009
传送门这道题换成了多成了多项式的相乘,因为指数最大是1000,所以相乘后指数最大值为2000。题目中内存限制为65536KB,所以2000X4/1024是不会超出内存限制的。#include #include #include using namespace std;const int MAX=2001;double array[MAX];double result[MAX];
2015-12-06 09:35:55
768
原创 PAT甲级1008
1008传送门这道题很简单,比编程之美上面的都简单,所以也没什么好说的。直接上代码就是#include using namespace std;const int UP=6,DOWN=4,KEEP=5;int main(int agrc,char **argv){ freopen("num.txt","r",stdin); int N,previous_layer,total
2015-12-06 09:32:09
676
原创 PAT甲级1007
问题链接:http://www.patest.cn/contests/pat-a-practise/1007实际上就是最长公共子序列问题,不过问题有两个小坑需要注意下。特殊情况1:整个序列都是负数特殊情况2:最大公共子序列和不止有一个,这个时候也很简单,倒着来就行。看我代码就会明白#include using namespace std;class MSS{p
2015-12-04 22:32:11
1148
原创 PAT甲级1006
传送门这道两个sort就可以解决问题了,多亏了C++中string自带的比较函数。#include #include #include #include using namespace std;struct info{ string ID_number; string Sign_in_time; string Sign_out_time;};bool unlock(in
2015-12-04 21:02:05
639
原创 PAT甲级1005
传送门这道题很简单的了,,也没什么好说的。#include #include #include using namespace std;map IntToString{ {0,"zero"}, {1,"one"}, {2,"two"}, {3,"three"}, {4,"four"}, {5,"five"},
2015-12-04 20:59:44
590
原创 PAT甲级-1004
传送门题目大概意思是,求出一棵树中每一层叶子节点的数量,叶子节点即为没有任何子树的节点。我刚开始摸错门了,想着定义一个tuple类型,后来又想建一棵树,不过后来发现思路太繁琐了。到了网上查了以后,发现BFS就可以解决问题了。#include #include #include using std::string;using std::cin;using std::cout;usin
2015-12-04 20:55:45
1271
原创 PAT甲级1003
传送门仔细分析一下,你就会发现这实际上是一道单源最短路径问题,不过有个小坑是路径可能不止一条,同时要注意这是一个无向图。我第一次弄成有向图了,可以用Dijksttra和DFS结合,可以破之。#include #include using namespace std;const int N=505;const int INF=2147483647;int num_nodes,nu
2015-12-03 19:28:19
1341
原创 PAT-甲级1002
传送门#include #include #include using namespace std;struct Polynomials{ int exponents; double coefficients; Polynomials(int exponents,double coefficients){ this->exponents=exponents;this->coe
2015-12-01 15:39:11
1258
原创 PAT甲级1001
传送门#include #include #include using namespace std;int main(int argc,char **argv){ int n,m,sum; vector ivec; scanf("%d%d",&n,&m); sum=n+m; string src=std::to_string(s
2015-11-29 22:44:42
1287
原创 PAT1001
传送门#include int main(int argc,char **argv){ unsigned int n; scanf("%d",&n); if(n==1){ printf("0\n"); return 0; } int count=0; while(n!=1){ if(n%2==0){ n>>=1; count++; } else{
2015-11-29 18:50:25
370
原创 PAT1003
传送门因为PAT上GCC的版本是4.7.5,所以不支持C++11的正则,就用Python写了#coding=utf-8import ren=int(input())index=0;L=[]while(index<n): string=input() L.append(string) index+=1for var in L: matchObj=re.match(r'(
2015-11-29 18:19:06
386
原创 PAT1002
原题链接:http://www.patest.cn/contests/pat-b-practise/1002解决方案#include #include #include using namespace std;int main(int agrc,char **argv){ map IntToString{ {0,"ling"}, {1,"yi"}, {2,"e
2015-11-27 10:47:12
343
原创 用C++11学习多线程
有了线程,多核才有了真正意义上的并发。在单核时代,所谓的并发只是伪并发,类似于事件轮询的方式。只是轮询的周期比较快,所以对于我们人类来说看上去和真的并发没什么区别。如果把主人公换成复仇者联盟2上的快银,在他的世界观里。。。呵呵 并发毫无疑问能提高工作效率,但也肯定会有一些问题需要注意。很明显的一个问题就是,对于共享资源的访问。因为线程之间是栈私有,堆共有的。对于局部变量不会有什么问题,但如果两个线
2015-11-15 16:57:50
517
原创 计算机网络之WireShark与TCP协议
首先介绍WireShark这是一个抓包工具,对于网络工程师这是必不可少的。下载地址为:传送门 现在大概介绍一下TCP/IP协议栈。在这里我不想说OSI七层模型,因为实际上七层模型就只是一个概念,一个粗略的说明,同时实际上我们也没有完全按照那个模型来。 TCP/IP协议栈实际上包含了很多的网络协议,这其中又以TCP/IP最为知名。其中IP属于网络层协议,TCP属于传输层协议。虽然传输层协议不只TC
2015-11-07 18:25:39
823
原创 两道简单的笔试题
今天做了一个公司的笔试题,不过其实第二道我之前在编程之美上就看到过,不过考试时没写出来。第一道题如下: 有一个数组arr,长度为len;现有a,b。0=<a<=b<=len-1 请编写一个程序,找出arr[b]-arr[a]的最大值。 举例: [1015]\begin{bmatrix}10 & 15\end{bmatrix} 输出:0 这个我当时第一感觉就是有点类似最大子数组之和的。不
2015-10-17 19:17:31
1224
原创 python几个内建函数
今天看了几个python的几个内建函数,也都是大家熟悉的。不过因为我用的是Python3.4,所以有了一点新的发现。毕竟大部分文档都是2.7的。 第一个lambda,这个相比之前没有太大的变化。等几天写一个关于C++11 的lambda表达式的博客,大家等着哈。 python中的lambda格式是这样的:lambda arguments : expr举个例子f=lambda x,y:x+yf(
2015-10-09 21:54:45
1132
原创 反转二叉树,哈哈
这个问题因为前段时间一个大牛工程师Max Howell面试谷歌都火了,后来这家伙去了苹果。。我也不知道说什么了,谷姑娘把人家活生生的给拒了。 我今天也试着写了一下,递归版本的很easy的就写了出来。非递归版本的,自己思路一开始就错了。后来看了一篇博客,不过如此。/***** reverser binary tree *********** author: mark liang ****
2015-10-09 14:25:57
1880
原创 类型转换扯的淡
今天在看一位作者写的多线程文章时中间有这么一句代码:handle[i] = (HANDLE)_beginthreadex(arg...);_beginthreadex()这个函数返回的是一个unitptr_t类型,而handle[i]是一个句柄数组,所以需要一步类型转换 当时我想到如果用C++11定义的类型转换可能会比较好一点吧,不用那种C风格字符串了。于是很自然的把代码改成了下面这样handle
2015-10-08 22:37:46
493
原创 编程之美变形记——“49”的个数
昨天在杭电poj上看到一个道题。题目总结出来就是,给定一个正整数N,求出从1到N(包含N)之间49出现的个数。举例:如N=101则1到101之间101个数中,49出现一次。同时,409,4009(这样的数字不合法)。看到第一眼就想起来编程之美2.4有一道求“1”的个数的题目,这道题其实就是把“1”换成了49。我第一眼想到的是用49进制,不过仔细考虑一下之后是不合适的。然后想了一个小时左右没想出来。虽
2015-09-30 19:45:06
595
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人