c/c++
文章平均质量分 74
勿到
这个作者很懒,什么都没留下…
展开
-
较快速在一个数组中查找最大值和最小值
#include#define MAX 100001int a[MAX];int n;/* 时间复杂度为3*n/2 */void swap(int i){ if(i==n-1) return ; if(a[i]>a[i+1]) { int temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; }}void sort(){ in原创 2013-10-13 09:51:03 · 3488 阅读 · 0 评论 -
前序遍历中序遍历求后序遍历-数组篇
有关树的相关概念就不再这里介绍了,不清楚的同学可以自己查看原创 2014-09-29 15:50:57 · 1344 阅读 · 0 评论 -
欢乐暑假线上编程比赛第四题:分配糖果
题目详情有n个小朋友站成一排(编号从0到n-1),每个小朋友有一个rating值,存放在ratings数组中。老师需要给他们分配糖果,每个小朋友至少需要一颗糖果,对于任意相邻的两个小朋友i和i+1,rating值大的必须比rating值小的分配的糖果多(rating相同的没必要分配一样多的糖果)。请计算最少需要多少颗糖果,才能完成上述分配。输入格式:多组数据,每组数据第一行是一个正原创 2014-10-25 00:07:26 · 737 阅读 · 0 评论 -
凸包问题之GrahamScan解法
继上一篇凸包问题的蛮力解法,本篇将介绍凸包问题的GrahamScan解法。首先了解一下GrahamScan解法的原理:当沿着Convex hull逆时针漫游时,总是向左转在极坐标系下按照极角大小排列,然后逆时针方向漫游点集,去除非Convex hull顶点(非左 转点)。第一步原创 2014-12-07 23:04:25 · 748 阅读 · 0 评论 -
凸包问题之蛮力解法
凸包问题首先解释什么叫做凸包问题:1 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。下图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。2 一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用一根绳子把他们尽量紧原创 2014-12-07 22:35:31 · 1803 阅读 · 0 评论 -
LeetCode之Implement strStr()
本题是LeetCode28题,属于Easily级别给出题目描述Implement strStr().Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.Update (2014-11-02):The sig原创 2015-01-16 09:56:17 · 487 阅读 · 0 评论 -
C/C++中内存对齐初探讨
原来对内存对齐一直没弄清楚,现在找到两篇网友的文章备忘:http://blog.csdn.net/arethe/article/details/2548867http://blog.sina.com.cn/s/blog_59b189220100a49h.html一、什么是对齐,以及为什么要对齐:1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任转载 2015-01-22 10:31:07 · 483 阅读 · 0 评论 -
C++模板初探
模板定义以关键字template开始,后接模板形参表(template parameter list),模板形参表是用尖括号括住的一个或者多个模板形参的列表,形参之间以逗号分隔。模板形参可以是表示类型的类型形参(type parameter),也可以是表示常量表达式的非类型形参(non-type parameter)。非类型形参跟在类型说明符之后声明。类型形参跟在关键字class或typena转载 2015-03-24 17:42:43 · 461 阅读 · 0 评论 -
Redis源码阅读之aof.c
1、AOF缓冲区实现添加缓冲区块如果之前缓冲区链表中的最后一个block没有用完,那么先使用完,如果不够,在创建新的block添加到链表尾,为后续的写做准备输出缓冲迭代缓冲区链表,写到文件2、AOF重写 冲洗AOF文件:void flushAppendOnlyFile(int force)设置aof同步为AOF_FSYNC_EVENTSEC服务器原创 2015-05-08 21:36:06 · 1116 阅读 · 0 评论 -
Redis源码阅读之ae.c
1、需要处理的事件类型和结构这里包括文件处理事件、时间处理事件、事件终结处理事件、挂起之前处理事件 文件事件结构时间事件结构触发的事件结构事件驱动程序的状态 2、原型函数创建文件事件这里aeApi*这些函数都是具体多路复用模块提供的删除文件事件获取事件当前时间这里精确到秒和毫秒创建时间事原创 2015-05-09 13:17:11 · 761 阅读 · 0 评论 -
Redis源码阅读之rdb.c
RDB文件结构 1、如何保存长度rdbSaveLen函数说明了RDB文件中如何保存长度如果开头两位是00,那么就表示后面的6位保存的是长度,长度最大值63如果开头两位是01,那么就表示后面的14位保存的是长度,长度最大就是2^14-1如果开头两位是10,那么后面6位空着,接下来的32位表示长度,最大值2^32-1>8)&。xFF)l(REDIS_RDB_14BITLEN原创 2015-05-04 22:07:15 · 1025 阅读 · 0 评论 -
Volatile的陷阱
对于volatile关键字,大部分的C语言教材都是一笔带过,并没有做太过深入的分析,所以这里简单整理了一些关于volatile的使用注意事项。实际上从语法上来看volatile和const是一样的,但是如果const用错,几乎不会有什么问题;而volatile用错,后果可能很严重。所以在volatile的使用上,建议大家还是尽量求稳,少用一些没有切实把握的技巧。注意volatile修饰转载 2015-06-29 20:50:10 · 3066 阅读 · 1 评论 -
静态数据竞争检测工具之LOCKSMITH-安装和使用
静态数据竞争检测工具 LOCKSMITH原创 2015-07-21 09:37:50 · 1142 阅读 · 0 评论 -
Zookeeper C API学习总结
Zookeeper C API客户端使用C语言开发,zookeeper提供了两个库,zookeeper_st(单线程库)以及zookeeper_mt(多线程库)。zookeeper_st提供了异步API和集成在应用程序用来实现事件循环的回调函数,该库是为了支持pthread库不支持或是不稳定的系统而存在。使用过程中需要通过zoo_interest以及zoo_process实现事件处理以及通知机制。原创 2016-11-20 23:40:26 · 7504 阅读 · 2 评论 -
GDB多线程多进程调试
gdb多线程调试gdb提供的多线程调试工具新线程创建自动提醒thread thread-id实现不同线程之间的切换info threads查询存在的线程thread apply [thread-id-list] [all] args在一系列线程上执行命令线程中设置指定的断点set print thread-events控制打印线程启动或结束是的信息set scheduler-locki原创 2016-11-20 23:44:32 · 1230 阅读 · 0 评论 -
C++调用Python
1、Python嵌入程序介绍为什么要使用Python嵌入程序Python作为一门流行通用的脚本语言,可以很好的和C/C++程序结合在一起。原创 2016-12-17 19:33:27 · 1269 阅读 · 0 评论 -
C语言sizeof空洞之字节对齐(#pragma pack使用)
C编译器的缺省字节对齐方式(自然对界)在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。 C编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该转载 2014-10-26 10:49:30 · 745 阅读 · 0 评论 -
金色十月线上编程比赛第二题:解密
题目详情小强是一名学生, 同时他也是一个黑客。 考试结束后不久,他惊讶的发现自己的高等数学科目居然挂了,于是他果断入侵了学校教务部网站。在入侵的过程中,他发现了与成绩相关的内容是一个加密文件,这个文件由 n 个数构成,经过分析,这个加密文件的密钥为这 n 个数中二进制位数 1 最少的数。但由于数比较多,小强 希望你能帮他得到密钥,好在成绩公布之前将成绩改过来。输入描原创 2014-10-24 23:27:39 · 713 阅读 · 0 评论 -
回溯法求解八皇后问题
首先我们来了解一下八皇后问题。八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发原创 2014-09-25 15:02:59 · 1029 阅读 · 0 评论 -
较快速在一个数组中查找最大值和最小值(2)
/*分治法*/#include#include#include#includeusing namespace std;int a[16]={1,3,5,7,9,11,14,2,4,6,8,10,12,14,16,18};int b[9]={3,1,5,9,4,2,7,6,10};int t[2];vector splitEx(const string& src, string s原创 2013-10-13 09:56:20 · 985 阅读 · 0 评论 -
PAT Advanced 1067
关于这道题,首先要注意的是swap函数只能用swap(0,*),而不是平常我们用的swap(i,j),也是这个原因,第一次做怎么做都是答案错误。其次来说一下这道题的思路:题目暗示的swap次数最少,言外之意就是中间没有过多的过渡交换(指的就是中间某个位置的元素多次为其他位置的元素交换做过渡,典型的像 汉诺塔问题)。看示例{4, 0, 2, 1, 3},正常路线就是,4放到a[4]这个位原创 2013-10-13 11:54:37 · 1147 阅读 · 0 评论 -
PAT Advanced 1042
#includeint a[55]={0};int b[55]={0};int c[55]={0};char d[6]={' ','S','H','C','D','J'};/*简单的模拟题*/int main(){ int n,i,j; scanf("%d",&n); for(i=1;i<=54;i++) { scanf("%d",&b[i]); a[i]=i; }原创 2013-10-13 11:28:23 · 566 阅读 · 0 评论 -
PAT Advanced 1001
#includevoid format(int sum,int count){ if(sum/10!=0) format(sum/10,count+1); if(count%3==0&&sum/10!=0) printf(","); printf("%d",sum%10);}int main(){ int a,b; scanf("%d %d",&a,&b); in原创 2013-10-13 11:23:16 · 614 阅读 · 0 评论 -
PAT Advanced 1005
1005. Spell It Right (20)时间限制400 ms内存限制32000 kB代码长度限制16000 B判题程序Standard作者CHEN, YueGiven a non-negative integer N, your task is to com原创 2013-10-23 23:58:59 · 636 阅读 · 0 评论 -
PAT Advanced 1043
#include#include/*代码效率太低,有待改进*/int isBST(int *a,int count){ if(count==1 || count==0) return 1; int i,k; for(i=1;i<count;i++) { if(a[i]<a[0]) continue; break; } k=i-1; for(;i<count;原创 2013-10-13 11:25:20 · 566 阅读 · 0 评论 -
Coderbyte-Challenger之Letter Capitalize(单词字母大写)
如题:Have the function LetterCapitalize(str) take the str parameter being passed and capitalize the first letter of each word. Words will be separated by only one space. 翻译过来大体意思就是将字符串中每个单词的首字母改原创 2014-01-17 14:42:03 · 1097 阅读 · 0 评论 -
linux系统编程之信号(二):一些信号发送函数和不同精度的睡眠
一、kill, raise, killpg 函数int kill(pid_t pid, int sig);int raise(int sig);int killpg(int pgrp, int sig);kill命令是调用kill函数实现的,kill函数可以给一个指定的进程或进程组发送指定的信号,其中kill 函数的pid 参数取值不同表示不同含义,具体可man 一转载 2014-03-11 16:08:02 · 653 阅读 · 0 评论 -
sigaction结构浅析
信号安装函数sigaction(int signum,const struct sigaction *act,struct sigaction *oldact)的第二个参数是一个指向sigaction结构的指针(结构体名称与函数名一样,千万别弄混淆了)。在结构sigaction的实例中,指定了对特定信号的处理,信号所传递的信息,信号处理函数执行过程中应屏蔽掉哪些函数等。当然,此指针也可以为NULL转载 2014-03-11 10:14:17 · 1172 阅读 · 0 评论 -
Linux系统编程之信号(一):信号基本概述
一、为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程。2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断。3. 如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断。4. 终端驱动程序将Ctrl-C解释成一个SIGINT信号,记在该进程的PCB中(也可以说发送了一个SIGINT信转载 2014-03-11 10:38:32 · 592 阅读 · 0 评论 -
linux系统编程之信号(三):信号的阻塞与未决
一、信号在内核中的表示实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样的:转载 2014-03-11 16:42:35 · 584 阅读 · 0 评论 -
Linux之守护进程理解(2)
1、屏蔽一些有关控制终端操作的信号防止在守护进程没有正常运转起来时,控制终端受到干扰退出或挂起。2、脱离控制终端,登录会话和进程组登录会话可以包含多个进程组,这些进程组共享一个控制终端,这个控制终端通常是创建进程的登录终端。控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。其方法是在fork()的基础上,调用setsid()使进程成为原创 2014-03-12 20:37:07 · 660 阅读 · 0 评论 -
Linux之僵尸进程和孤儿进程【总结】
1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进转载 2014-03-12 19:02:20 · 513 阅读 · 0 评论 -
linux系统编程之信号(四):信号的捕捉与sigaction函数
一、内核如何实现信号的捕捉如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下:1. 用户程序注册了SIGQUIT信号的处理函数sighandler。2. 当前正在执行main函数,这时发生中断或异常切换到内核态。3. 在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQU转载 2014-03-11 16:59:29 · 748 阅读 · 0 评论 -
Linux之守护进程理解
在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。一. 守护进程简介 守护进程,也转载 2014-03-12 18:45:55 · 582 阅读 · 0 评论 -
序列中查找第二小元素
序列中查找第二小元素有很多方法,本文介绍的是采用分治原创 2014-09-27 15:15:00 · 740 阅读 · 0 评论 -
JNI基础知识学习汇总
JNI介绍JNI(Java Native Interface),也就是java本地接口,主要是用来支持和本地代码之间的互动-在Java程序中调用native code或者在native code中潜入Java虚拟机调用Java代码。原创 2017-01-08 11:04:42 · 710 阅读 · 0 评论