- 博客(66)
- 收藏
- 关注
转载 redis数据库操作
Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用。这在安全性上会有一定的问题,所以需要启用Redis的认证密码,增加Redis服务器的安全性。1. 修改配置文件Redis的配置文件默认在/etc/redis.conf,找到如下行:#requirepass foobared去掉前面的注释,并修改为所需要的密码:r...
2018-07-27 17:10:44
292
原创 10. Regular Expression Matching
'.' Matches any single character.'*' Matches zero or more of the preceding element.The matching should cover the entire input string (not partial).The function prototype should be:bool isMatch(c
2017-08-26 15:33:15
213
原创 SkipList -----跳表
今天学习了一个非常高效的数据结构,那就是跳表。其查找效率比红黑树要更高。整个的实现见下面://参考:Skip lists: a probabilistic alternative to balanced trees #ifndef _SKIPLIST_H_#define _SKIPLIST_H_#include #include #include #include #define
2017-06-30 21:10:20
250
原创 76. Minimum Window Substring 10-line template that can solve most 'substring' problems
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).For example,S = "ADOBECODEBANC"T = "ABC"Minimum window is "BAN
2017-06-28 10:23:05
234
原创 69. Sqrt(x)
Implement int sqrt(int x).Compute and return the square root of x.好精妙的方法啊int mySqrt(int x) { long r = x; while (r*r > x) r = (r + x/r) / 2; return r;
2017-06-27 15:20:37
213
原创 60. Permutation Sequence
The set [1,2,3,…,n] contains a total of n! unique permutations.By listing and labeling all of the permutations in order,We get the following sequence (ie, for n = 3):"123""132""213""231""3
2017-06-23 21:32:21
244
原创 37. Sudoku Solver
Write a program to solve a Sudoku puzzle by filling the empty cells.Empty cells are indicated by the character '.'.这道题是一个回溯法来解决的问题,依次试探每一种可能的情况,当满足这一情况时再向后递归直至整个问题解决。真正理解了回溯法的强大 啊,感谢啊 。 void
2017-06-11 21:10:29
181
原创 31. Next Permutation
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.If such arrangement is not possible, it must rearrange it as the lowest possible
2017-06-08 21:09:23
185
原创 MakeFile文件的书写
基本的格式是:Object:Prequisitescommandgcc -o filename file.o,表示生成目标文件filename,生成默认的可执行程序gcc -c filename.c ,表示只编译(compile)源文件,会把.c或者.cc源程序编译成目标文件,一般是.o 文件示例: 正如前面所说的,如果一个工程有3个头文件,和8个C文件,我们
2017-06-06 23:12:13
237
原创 缓存I/O和直接I/O
什么是缓存I/O:缓存I/O又称为标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存中,即数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。缓存I/O的优点:1、缓存I/O使用了操作系统内核缓冲区,在一定程度上分离了应用程序空间和实际的物理设备;2、缓
2017-06-06 15:45:13
2022
原创 44. Wildcard Matching
'?' Matches any single character.'*' Matches any sequence of characters (including the empty sequence).The matching should cover the entire input string (not partial).The function prototype shoul
2017-06-06 14:02:38
155
原创 10. Regular Expression Matching
方法一、p[j+1]=='*',此时从s[i]开始的子串,假设是s[i],s[i+1].....s[i+k]都等于p[j],则意味着这些都可能是合适的匹配,这就得递归剩下的(i,j+2),(i+1,j+2).......(i+k,j+2)实现代码:bool isMatch(string s, string p) { return check(s,p,0,0); }
2017-06-06 10:37:55
191
原创 I/O模型
/*四种I/O模型:一、阻塞I/O:阻塞I/O执行的系统调用可能因为无法立即完成而被操作系统挂起直到等到的事件发生为止;二、I/O复用是指:应用程序通过I/O复用函数向内核注册一组事件,内核通过I/O复用函数把其中就绪的事件通知给应用程序I/O复用函数本身是阻塞的,它们能提高程序效率的原因在于它们具有同时监听多个I/O事件的能力;三、SIGIO(信号驱动I/O),将一个目标文件描述符指
2017-06-05 14:39:53
200
原创 0-1背包问题
背包问题仍然是一个最优解的问题,但是不能用贪心算法来求解。只能用动态规划方法来求解。#include int max(int a,int b){ return a<b?b:a;}int main(){ unsigned int weight[5]={0,1,3,5,9}; unsigned int value[5] ={0,2,3,4,7}; int vec = 10; i
2017-06-03 20:55:10
163
原创 海量数据处理的top K个数的问题
这个问题有两种的思路,第一种是将整个的数组建堆,(时间复杂度是O(N)),再分K次从堆的顶端取值,取完值之后将堆尾的元素放到堆首来下虑(K*logN),总的时间复杂度是(O(N+K*logN)).//对原始的数据原地建最大堆,时间为O(N),然后提取K次,每次提取时,取第一个值再下沉,k*logN,总的时间复杂度是O(N+k*logN)#define LENGTH 9#define GET
2017-06-03 19:31:22
333
原创 海量数据处理之字符串处理
#include #define MAX 26using namespace std;struct Node{ bool isStr; Node *next[MAX];};void insert(Node *root,const char *s){ if(root==NULL||s=='\0') return; size_t i; Node *p = root; whi
2017-06-03 15:31:41
461
原创 String类重写
#include #include using namespace std;class String{public: String(const char *data=NULL); String(const String &other); String& operator=(const String &other); void Print(); ~String();private
2017-06-03 13:22:24
461
原创 智能指针类的实现
#include using namespace std;template class SmartPointer{public: SmartPointer(T *p=0):poin(p),use(new size_t(1)){} SmartPointer(const SmartPointer &p){ if(this!=&p) { poin = p.poin; us
2017-06-03 12:05:14
261
原创 FTP传输文件的两种方式
FTP可用多种格式传输文件,通常由系统决定,大多数系统(包括UNIX系统)只有两种模式:文本模式和二进制模式。文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。 一般来说: 如果你用错误的模式传输你的图片,你将会无法看到图片,看到的会是乱码。 如果你
2017-05-20 16:34:01
2674
原创 SIGPIPE信号
当一个进程向某个已收到RST的套接字执行写操作时,内核向该进程发送一个SIGPIPE信号。该信号的默认行为是终止进程,因此进程必须捕获它以免不情愿地被终止。不论该进程是捕获了该信号并从其信号处理函数返回,还是简单地忽略该信号,写操作都将返回EPIPE错误。
2017-05-19 10:38:16
257
转载 线程的状态----joinable和detached
在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况下,原有
2017-05-18 20:41:46
566
原创 pthread_join和pthread_detach的作用
每一个线程在任何情况,要么是可结合的状态(joinable),要么是可分离的状态(detached)。 先将这两个函数的原型列一下 int pthread_join(pthread_t tid, void ** pthread_return); int pthread_detach(pthread_t tid); 当我们的线程运行结束后,最后显示的调用被回收。这样就出现两种回收方式
2017-05-18 19:46:18
327
原创 Linux 高级I/O函数
一、pipe()函数1.1、pipe函数创建一个管道,以实现进程间通信。1.2、int pipe(int fd[2]),pipe函数的参数是一个包含两个int型整数的数组指针。函数成功时返回0,该函数创建的两个文件描述符fd[0]和fd[1]分别构成管道的两端,fd[0]只能从管道读出数据,fd[1]只能往管道里面写入数据,而不能反过来使用。如果想要实现双向的数据传输,只能使用两个管道。默
2017-05-10 20:35:33
305
原创 数组里面的数字的组合为某个和以及二叉树的某个路径的和为某值的全部路径
这种类型的题目有两种,第一种情况下可以对里面的数字重复使用,vector> vec; vector> combinationSum(vector& candidates, int target) { sort(candidates.begin(),candidates.end()); vector local; check(candi
2017-05-08 20:50:31
216
原创 字符串的最长回文子序列以及最长子串
//最长子序列int longestPalindromeSubseq(string s) { int size = s.size(); vector> dp(size,vector(size,0)); for(int i=0;i<size;i++) dp[i][i]=1; for(int len=1;len<
2017-05-08 17:01:50
258
原创 TCP/IP通信
在服务器子进程终止时,给父进程发送一个SIGCHLD信号,父进程未加处理,子进程于是进入僵死状态。在listen()函数调用后增加以下的函数调用:signal(SIGCHLD,sig_chld),sig_chld是函数名。当有多个子进程同时终止时。也就是同时发送SIGCHLD时,必须调用waitpid函数而不是wait函数。处理僵尸子进程:调用waitpid()函数而不是wait()函数。在一个循
2017-05-07 13:04:29
268
原创 硬币组合问题
//硬币的找零问题,给定一个数值,求使得最少的硬币数组合成所要的数值int CoinChange(vector coins,int len,int sum){ vector dp(sum+1,sum+1); dp[0]=0;//设定为0 for(int i=1;i<=sum;i++) { for(int j=0;j<len;j++) { if(coins[j]<=i)
2017-05-06 16:55:33
305
原创 有序链表的合并
ListNode* Merge(ListNode* p1,ListNode* p2) { if(p1==NULL) return p2; if(p2==NULL) return p1; if(p1->valval) { p1->next = Merge(p1->next,p2); return p1; } else { p2->next
2017-04-28 19:59:52
197
原创 链表删除节点
struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){}};//从一个链表中删除重复的节点,保留一个该节点ListNode* deleteDuplicates(ListNode* head){ if(head==NULL) return head; ListNode *pre
2017-04-28 15:37:54
284
原创 数组中只出现一次的数字
//一个数组里面的所有的数字出现两次,只有一个数只出现一次,找出这个数void FindUniqueNum(vector p,int num){ num = 0; for(int i = 0;i<p.size();i++) num^=p[i];}//一个数组里面的其余的数出现两次,有两个不同的数出现一次,找出这两个数void FindTwoUniqueNum(vector p,i
2017-04-28 13:26:51
180
原创 二叉树的三种非递归遍历
struct TreeNode{ int val; TreeNode *left; TreeNode *right;};void PreOrder(TreeNode *root){ if(root==NULL) return; stack stk; TreeNode *p = root; while(p!=NULL||stk.empty()) { while(p!=
2017-04-27 18:30:00
179
原创 顺时针打印矩阵的元素啊
void PrintMatrixIncircle(int** numbers,int columns,int rows,int start){ int endX = columns-1-start; int endY = rows-1-start; for(int i = start;i<=endX;i++) { int number = numbers[start][i];
2017-03-30 18:08:51
299
原创 二叉树
struct BinaryTreeNode{ int val; BinaryTreeNode* left; BinaryTreeNode* right;};一、判断二叉树B是不是A的子树bool DoseTree1HasTree2(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2){ if(pRoot2==NULL) return
2017-03-30 16:38:07
197
原创 打印1到最大的n位数
void PrintNum(char* number){ bool Beginning0=true; for(unsigned int i = 0;i<strlen(number);i++) { if(Beginning0&&number[i]!='0') Beginning0 = false; if(!Beginning0) printf("%c",number[i]
2017-03-30 15:04:15
158
原创 字符串大数相加和相乘
string addBinary(string a, string b) { string s = ""; int c = 0, i = a.size() - 1, j = b.size() - 1; while(i >= 0 || j >= 0 || c == 1) { c += i
2017-03-22 16:51:48
417
原创 位操作的运算
int divide(int dividend, int divisor) { if (!divisor || (dividend == INT_MIN && divisor == -1)) return INT_MAX; int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
2017-03-15 22:09:26
390
原创 C++中的堆与自由存储
堆是操作系统所维护的一块特殊内存,它提供了动态分配的功能,当运行程序调用malloc()时就会从中分配,稍后调用free可把内存交还。而自由存储是C++中通过new和delete动态分配和释放对象的抽象概念,通过new来申请的内存区域可称为自由存储区。基本上,所有的C++编译器默认使用堆来实现自由存储,也即是缺省的全局运算符new和delete也许会按照malloc和free的方式来被实现,这时藉
2017-03-14 19:59:41
306
原创 new与malloc之间的区别
1、new操作符从自由存储区上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是c++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,c语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。自由存储区是否可以是堆?这取决于operate
2017-03-14 16:53:46
1571
原创 指针与引用之间的区别
一:定义和性质的区别:1、指针是一个变量,它是一个明确的对象,只不过这个变量存储的是一个地址,,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个对象,只不过是原变量的一个别名而已。2.可以有const指针,但是没有const引用;3、指针可以有多级,但是引用只能是一级;4、指针的值可以为空,但是引用的值不能为NULL;5、指针的值在初始化后可以改变,即指向其它的存储单元
2017-03-14 16:35:57
279
原创 四种类型转换
一、static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。double slope = static_cast(j)/i;static_cast对于编译器无法自动执行的类型转换也是非常有用的。例如使用static_cast找回存在于void*指针中的值。void* p= &d;//正确,任何非常量对象的地址都能存入void*do
2017-03-14 14:36:47
309
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人