自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张勤一

echo "are you happy ?" | cut -d ' ' -f 3 | tr -d '\r\n '

  • 博客(853)
  • 资源 (11)
  • 问答 (2)
  • 收藏
  • 关注

原创 编程之美3.2 电话号码对应英语字母

这也是一道很常见的题目,好多类似的题目用的也是同样的解法,这道题目的意思是,我们的手机上的数字键上面对应着英文字母,那么这个数字可能对应3个,也可能对应4个,也有可能对应0个,那么,当我输入一串数字后,需要给出所有这些数字可能对应的英文字母。      说到这里,相信大家也就明白了,这其实就是全排列,只不过我们首先需要给出已知条件,即数字对应着哪些字母,对应着几个字母,因为要做全排列,就一定要知道

2014-10-19 12:51:22 2554

原创 编程之美3.1 字符串移位包含问题

这道题目的意思是给定一个字符串,作为源字符串,之后给出其他的字符串,确定源字符串是否能够经过旋转而得到给定的字符串,即移位包含问题。      假如,给定一个字符串 abcdefg,接着给定字符串 cdefgab,很显然,给定的字符串是可以经过源字符串旋转而得到的,但是,给定字符串 cdegfab 就不能由源字符串经过旋转而得到。      当然,这道题有很多解法,我们可以经过判断字符串中字符的位

2014-10-17 19:02:28 1644

原创 编程之美2.17 数组循环移位

这是一个很经典的题目,题目的大概意思是这样的:      有一个存储字符串的数组,需要按照要求循环移动数组中的字符,例如,数组中存储字符 abcd1234,循环右移4位,之后,会得到这样一个字符数组 1234abcd,当然,左移也是同样的解法      想想这个问题不是很难,顺序依次移动就可以了,这样做的话,时间复杂度是O(n2)量级的,那么,有没有更快的方法呢?      首先,我们需要对数组的

2014-10-16 14:39:18 1572

原创 编程之美2.16 最长递增子序列

这道题目要求返回一个数字,这个数字代表一个数组中最长的递增子序列,当然,不要求这个序列是连续的,比如,有这样一个数组:{1, 3,5,7, 2, 9},那么这个数组的最长递增子序列就是5,即1,  3,  5,  7,9      解决这道题目的思想就是:后面的数字只要是大于前面递增子序列的最大值,那么,它就一定大于前面所有的序列,既然需要知道前面保存的序列,那么,我们这里就需要一个辅助数组,数组

2014-10-16 09:54:26 2477

原创 编程之美2.15 二维数组最大子数组的和(数组下标从(1,1)开始)

首先,我们看到这篇文章的题目,我们就会想到之前的那个题目 -- 连续子数组最大和问题。这个问题无疑就是把原问题扩展到二维的情况。      想起来这个问题也不是很难,我们可以求解一维矩阵的思想,即我们可以固定住行(或列),之后,我们去求解列(或行)所构成的最大和就可以了。 这里的解法利用的是固定住行,然后求解需要寻找的列之和,利用书中提到的一个公式: 以左上角的元素(1,1)和当前元素(i,j)为

2014-10-15 16:07:57 1984

原创 编程之美2.14 求数组的子数组之和的最大值

这是一个在面试中出现概率很高的一道题目,就拿我来说吧,面试了5家公司中,两家公司问了这道题目,可见,这道题目是非常经典的。      解题思想也不是很难,我熟悉的有;两种解题办法:      1. 一直连加,终止当前序列的条件是连加的和是负数      因为,一个数加上一个负数之后肯定是没有原来的数值大,所以,这肯定是没有意义的,最终,我们利用这个思想得到如下的解法。      函数声明:ll D

2014-10-14 14:40:42 1693

原创 编程之美2.13 子数组的最大乘积

这道题目是求 n-1 个数的最大乘积,即数组大小为 n,则会存在 n 个 n-1 的连续数字,那么,我们需要寻找的是最大的那一个乘积。      其实看到题目,感觉很简单,循环走两遍数组就可以得到结果,但是,那样的话,复杂度是平方量级的,如果一个数组中元素很多,那么,时间效率上是不能接受的,所以,需要重新思考问题,寻找简洁的解法。      这里,我们可以利用辅助数组的办法,把需要乘在一起的数字保

2014-10-14 09:44:24 1970

原创 编程之美2.12 快速寻找满足条件的两个数

这道题目的意思是,在一个数组中寻找两个数,使这两个数的和等于给定的数(找到任意一组就可以了)。      题目读完之后,感觉这道题目还是很简单的,就是遍历数组呗,走两遍,即可以在O(n2)时间复杂度内解决这个问题。不过,仔细想想之后,复杂度还是可以降低的。      首先,我们可以对数组进行排序,这样,得到的数组就是一个有序数组(假设数组是递增的),那么,我们可以利用两个指针,一个指针指向数组的第

2014-10-08 16:33:43 1590 3

原创 编程之美2.10 寻找数组中的最大值和最小值

这个问题其实很容易解决,就是循环遍历一遍数组,然后找到数组中存在的最大值和最小值就可以了,书中主要讨论的问题是比较次数较小的方法,不过,书中已经证明了,无论用什么方法最少的比较次数也就是循环遍历一遍的比较,结果是O(1.5N)的,所以,很容易的可以解决这个问题。      第一种方法:      函数声明:void DutFindMaxAndMinInArray_1(int*, int, int&

2014-10-08 10:09:04 2258 2

原创 编程之美2.9 斐波那契数列

斐波那契数列是我们在学习C语言的时候,在递归那一章的经典实例,当然,还会有汉诺塔的例子。      这个问题时这样定义的:                  0 (x        f(x)   = 1 (x == 1)                  f(x - 1) + f(x - 2) (x > 1)      看到这个递推公式后,我们很容易可以写出如下的代码:

2014-09-29 15:00:53 1979 4

原创 编程之美2.8 找符合条件的整数

这个题目是,给定一个整数 N,需要寻找另外一个整数 M,使得 N * M 得到的结果十进制表示中只存在1和0两个数字。首先看到这个题目,第一思想肯定是 使 M = 1,并依此递增 M 的值,直到 N * M 获得想要的效果,但是,如果 N 很大呢,那么计算量也是很大的,所以,我们需要寻求更好的解决办法。      书中提到的解决办法有点复杂,这里我介绍的方法也是非常简单的,就是倒过来思考问题,我们

2014-09-28 15:19:34 1655

原创 编程之美2.7 最大公约数,最小公倍数

书中的题目是求两个数的最大公约数,其实这个问题时当我们学习C语言的时候老师就讲过的算法,和教学中的求素数是一个类型的问题。      我们当时学的方法是 “辗转相除法”,即利用公式: f(x, y) = f(y, x % y),直到 x % y == 0,取x就是两个数的最大公约数。      但是书中说道,乘除运算太浪费时间了,所以,我们可以换一种方法去思考这个问题,乘除不能用,就只能是加减了,

2014-09-27 14:45:53 2504 2

原创 编程之美2.5 寻找最大的K个数

在一个数组中寻找最大的K个数,我们首先说一种非常简单的方法,利用快速排序中的分割算法,即我们经常看见的partition。这个函数会返回一个 int 类型的值,这个值代表的是前一半数字和后一半数字的分割点,前一半数字都小于等于后一半数字(递增排序),所以,我们只要找到相对应的分割点,即可以找到最大的K个数,或者最小的K个数,这就是利用线性方法可以完成任务的方法。      首先,给出函数声明:in

2014-09-27 12:48:53 1848

原创 编程之美 2.4 1的数目

这道题的意思是,给定一个数n,那么从1到n这n个数中,1出现了几次。这个问题开始看,肯定不容易做,往往都是利用最笨的方法,一个数一个数的找就行了,那么如果n很大,就需要非常多的时间了,书中提供了更好的方法,需要发现数字中存在的相关规律:对于数abcde,c这位出现1的次数分以下情况:1.若c > 1,结论是(ab + 1)* 100;          2.若c == 1,结论是(ab)* 100

2014-09-25 16:33:55 1982

原创 编程之美2.3 寻找发帖水王

这道题目由于不容易写测试用例,所以,可以把题目转换为:在一个数组中,有一个数字出现的次数超过了数组大小的一半,这和题目原意是一样的。      这道题目的思想是我们同时去掉数组中两个不一样的数字,那么,数组中原来存在的规律是不变的(仅针对这个题目)。      好吧,还是先给出函数声明:/*2.3 寻找发帖水王*/bool DutVerify(int*, int, int);int DutFi

2014-09-25 12:12:44 1430

原创 编程之美2.2 不要被阶乘吓倒

开始看到这道题目的时候,我还以为是利用字符串表示整型数的思想,后来一看,由于是一个数的阶乘,那么,如果这个数本身就很大,那么,即使是利用字符串表示也是不合理的,所以,看了下这道题的解释,书中给出了一个公式之后就明白了题目的意思。      首先,我先把函数声明和题目要求贴出来:/*2.2 不要被阶乘吓倒*//*2.2.1 N!的末尾有多少个0*/int DutCountOf0InFactori

2014-09-24 14:47:49 1631

原创 编程之美2.1 求二进制中1的个数

最近一段的时间,一直在看编程之美之类的算法书籍,总的来说,wozui

2014-09-24 12:56:35 2397

原创 C 函数 strstr 的高效实现

C函数库中有一个函数 strstr(char*, char*),它实现的是在一个原字符串中查找一个子串,如果找到这样的一个子串,返回这个子串在原字符串中的起始位置,若没有找到这样的一个子串,则返回NULL。      但是,函数库中实现的仅是一般情况下的查找,即没有做太多优化,在执行一些特殊的字符串时效率很低,所以,在很多面试中要求改进这个算法,实现效率高的 strstr 算法,这里,我对原算法进

2014-06-20 17:37:57 4271 1

原创 别顾着学习工作,没了生活

首先,需要说明的是这是一篇无码的文章,这里不谈任何关于技术的问题,只是写写学习工作之外的生活。   好久没更新博客了,因为自己太忙了,也太累了,剩下的空闲时间都是拿来休息了,所以,迟迟没有动笔,说来,最近也有很多事,论文需要写,项目需要做,不懂的需要学,着实辛苦,当然,也有好久没有出去玩。。。   今天阳光明媚,非常适合出去散步,踏青之类的活动,由于之前的一天去看海了,所以,今天打算找个公园转转。

2014-04-06 18:24:06 9806 101

转载 结合typedef更为直观的应用函数指针

“函数指针”的本质是一个指针变量,只不过该指针变量指向函数。1:简单应用形式1:返回类型(*函数名)(参数表)[html] view plaincopy#include stdio.h>    char* (*test)(char *);//定义一个函数指针,使用之前对其赋值  char* fun(char *ch)//定义一个普通函数  {       return ch;  }    void

2014-03-22 10:52:45 1632 1

转载 C语言的那些秘密之---函数返回局部变量

一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意

2014-03-21 22:16:18 1845

转载 STL内存分配器:allocator

一、STL泛型容器 与 内存管理1.1 STL泛型容器中隐藏了内存管理工作      STL提供了很多泛型容器,如vector,list,map等。程序员使用时之关心如何存放对象,不用关心如何管理内存。      容器会根据需要自动增长内存,在退出其作用域时,也会自动销毁占有的内存。      STL容器巧妙的避开了繁琐而且容易出错的内存管理工作。二、STL默认的内存分配器2.1 STL默认的内存

2014-03-14 14:50:44 2275

原创 数据结构 -- 二叉树

这篇文章介绍的是经典的数据结构--二叉树,在这篇文章里介绍了几乎二叉树的所有操作。      二叉树给我们最重要的印象莫过于递归,因为这棵树就是递归的,所以,我在解决各个问题时大部分都用到了递归,代码简单且易于理解,好吧,这篇文章的代码有点长,贴出来吧:头文件:/* * dlut_bitree.h * * Created on: 2014年1月13日 * Author: DLU

2014-01-16 08:51:44 2524 7

原创 数据结构 -- 双向循环链表

这篇文章写的是双向循环链表,这也是个非常经典的数据结构,我们在看 Linux 内核代码时就经常会遇到它。比如,在Linux的内核中实现进程描述符,使用的就是双向循环链表,因为它使用起来很方便,每个节点不只是有 data 字段,还有 prev , next 字段,对于向前和向后查找相应的节点很方便,下面贴出实现代码,仍然是很简单的操作,且没有过多的错误控制:头文件:/* * dlut_dclist

2014-01-15 08:46:53 2333

原创 数据结构 -- 队列

这里实现的队列依然是使用这篇文章中的单链表http://blog.csdn.net/dlutbrucezhang/article/details/18225473来实现的,并不复杂,且不含有过多的错误控制,同样需要自己进行正确的输入,这个队列实现的一系列操作类似于前一篇文章写到的栈,提供了基本的操作,好吧,直接把代码贴下吧:头文件:/* * dlut_queue.h * * Created

2014-01-14 14:07:29 1594

原创 数据结构 -- 栈

这里实现的栈是利用上一篇文章中的单链表来实现的:http://blog.csdn.net/dlutbrucezhang/article/details/18225473,这个栈的实现也是一些基本的操作,也是没有什么错误控制的,哈哈,其实一般实现的栈也不会提供错误控制的,用的不好程序崩溃了那也是自己的事,好吧,代码贴出来:头文件:/* * dlut_stack.h * * Created o

2014-01-14 08:51:30 1961

原创 数据结构 -- 单链表

快要放假了,实在是待不住了,论文也看不下去,也没啥其他的事做,就写写常用的数据结构吧,正好下个学期就要找工作了,也是方便以后自己使用这些数据结构,好吧,这里实现的数据结构没有太多的错误控制,需要自己去判断什么不应该为空,第一篇文章贴出最经典的单链表的实现:头文件:/* * dlut_list.h * * Created on: 2014年1月13日 * Author: DLUT

2014-01-13 17:00:25 2017

原创 线程相关函数讲解

我们都知道,Linux 中的线程其实就是进程,只是线程共享进程的地址空间,其他的没有什么特别,线程也具有进程描述符,内核栈,thread_info 结构等等,进程所具有的东西。      创建线程我们需要用到的函数是 pthread_create,线程和进程一样,需要进程进行等待,以释放线程占用的其他资源,哈哈,这又和进程的实现是一样的,主线程等待子线程的函数是 pthread_join,好吧,下

2014-01-09 20:37:01 1939

原创 利用文件锁控制程序的执行

我们在写程序的时候,需要同步控制的时候往往利用线程锁对程序进行加锁控制,哈哈,昨天看《UNIX网络编程》,里面提到对程序可以利用文件锁进行程序控制,觉得挺有意思,就拿过来试试。      首先,我们需要知道一个库函数和一个结构体:fcntl,struct flock,没错,函数的意思就是文件控制,结构体的意思是文件锁结构。由于,之前看到过这两个东西,网上的介绍也很多,在这里就不多做介绍了,不懂的同

2014-01-08 10:56:58 2133 2

原创 C函数 mktemp

最近写程序的时候需要临时文件,于是开始查怎样生成一个临时文件,但是,需要注意,这个临时文件必须是唯一的,不能与其他已经存在的文件有冲突,所以,大部分的函数都会失效,不过,mktemp 函数可以做到这一点,首先,我们来看一看这个函数的原型:      char * mktemp(char *template);      我们需要注意,template 代表的是传入的文件名,这个文件名必须以 XXX

2014-01-08 09:04:55 5520 3

转载 Linux 有趣命令

1. sl 命令sl是指“steam locomotive(蒸汽机车)”,你会看到一辆火车从屏幕右边开往左边。。。。。。安装  $ sudo apt-get install sl 运行  $ sl可以通过设置别名,给别人来个恶作剧,让ta敲ls就跑出个火车出来,不知道的肯定很有效果 O(∩_∩)O$alias ls=sl2. fortune  命令输出一句话,有笑话,名言什么的,中文版有唐诗宋词,

2013-12-27 21:49:55 2300 6

原创 socket通信函数的深入分析

平时我们可能会用 socket 通信做个作业交给老师,一般情况下,都是拷贝一段代码,ip 地址改下,端口号改下也就可以了,即使是会写 socket 通信程序,甚至是使用 socket 做一个文件传输的东西也不一定知晓 socket 通信函数的内部实现原理,这篇文章我就介绍下这些函数的内部实现:      1.socket      这个函数是通信的开端。当我们使用这个函数并指定了协议类型之后,这个

2013-12-26 17:11:24 2840 1

原创 string.h 的实现

最近很是烦躁,没做什么事,随便花了点时间把 C 库中的 string.h 中的几个函数实现了下,不多说了,直接贴代码吧,可能会存在错误和不好的算法,希望大家见谅:       测试函数写的乱七八糟,就不贴在这里了,有些函数是不需要实现差错控制的,使用不当,程序崩溃那是自己的事,我实现的这些个函数可能和经典的实现存在较大的差距,不过,我说过了,这仅仅是个人觉得好玩才随便写的,我也没那么多的时间去一一

2013-12-26 14:27:09 2314 1

转载 简单分析一下socket中的bind

在最开始接触bind的时候,只是在写基于tcp的server端的时候,知道在listen之前需要先bind一下,用来确保socket能在某个固定的端口监听。而bind的时候,函数参数中的端口填自己将要绑定的端口就行;而IP地址,需要填本机的IP,但是也可以用一个宏INADDR_ANY代替,用这个宏就可以不用查找本机的IP,它就可以代替本机的IP。当时只觉得这个INADDR_ANY比较神奇,但是由于

2013-12-22 11:08:19 3085

转载 GitHub详细教程

Table of Contents1 Git详细教程1.1 Git简介1.1.1 Git是何方神圣?1.1.2 重要的术语1.1.3 索引1.2 Git安装1.3 Git配置1.3.1 用户信息1.3.2 高亮显示1.3.3 忽略特定的文件1.3.4 使用.gitkeep来追踪空的文件夹1.4 开始操作Git1.4.1 创建内容1.4.2 创建仓库、添加文件和提交更改1.4.3 diff命令与co

2013-12-20 16:55:16 2252

转载 ioctl()函数详解

我这里说的ioctl函数是指驱动程序里的,因为我不知道还有没有别的场合用到了它,所以就规定了我们讨论的范围。写这篇文章是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。一、 什么是ioctl     ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下

2013-12-03 08:17:41 2902

转载 UNIX下C语言的图形编程-curses.h函数库

相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式 的画面也较为美观. 对 Programming 有兴趣的朋友一定对此感到好奇, 也 许他能在 PC 上用 TurboC 轻易地写出类似的程式, 然而, 但当他将相同 的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 其实, 原因很简

2013-12-01 20:40:47 4003 1

原创 Linux命令的实现 -- ls pwd cd

其实这些命令的实现都是 C 语言提供的一些库函数,我们只需要使用这些函数,并对得到的结果进行相应的格式化即可,好的,我们开始吧:ls 用到的函数是 opendir ,readdir,这些都是读目录的函数,读取目录中的内容之后 ,我们可以对它进行解析,它是一条一条的读的,所以,我们可以得到全部的文件。pwd 用到的函数是 getcwd ,这个函数的意思是 get current working di

2013-12-01 10:45:12 6643 4

原创 popen函数

我们平时写程序和用终端输入命令的时候,常常会用到管道,比如,在一段程序中,你可能会这样写       int fd[2]; pipe(fd)      这时,我们就创建了一个管道,实现了进程之间的通信。      再比如,我们用终端的时候,我们可能会这样输入命令: ls -la | grep test      我们也是在两个命令之间创建了一个管道。      这篇文章介绍一个函数,用来创建管道的

2013-11-28 10:53:21 2128

转载 FTP两种连接模式

FTP是有两种传输的模式的,主动模式和被动模式,之前一直没怎么去搞明白之,现在找了下资料, 重新整理了下:一个完整的FTP文件传输需要建立两种类型的连接,一种为文件传输下命令,称为控制连接,另一种实现真正的文件传输,称为数据连接。1. 控制连接客户端希望与FTP服务器建立上传下载的数据传输时,它首先向服务器的TCP 21端口发起一个建立连接的请求,FTP服务器接受来自客户端的请求,完成连接的建立过

2013-11-27 16:29:14 13822

C语言排序算法

这里包含了一些面试中会遇到的算法,个人感觉实现比较简单,浅显易懂

2014-10-23

面试题目集锦--二叉树

面试的时候,我们会经常碰到二叉树之类的题目,这里,我对二叉树算法进行了许多的总结,希望能对一两位朋友有帮助

2014-10-22

链表算法集锦

这是一个关于链表算法的类,里面收集的算法还是比较全面的,当然,由于本人水平有限,可能在算法中存在一些错误,欢迎大家指正

2014-10-21

适配器模式

适配器模式设计,这里用的用例代码是Java,有助于更好的学习设计模式

2013-07-17

教师信息和学生成绩管理系统

这是一个管理系统,实现教师信息和学生的成绩管理

2013-03-28

二维码生成

这个例子实现的是使用Android代码结合Google提供的开源项目ZXing实现二维码的生成,其中包含条形码的生成和解码

2013-02-16

一个Demo学习Android中所有的Service

这个例子包含了Android开发中常用到的Service,是学习Service的典例

2013-02-11

Android所有组件学习

这个例子几乎包含了Android内的所有组件,是安卓初学者学习的典例

2013-02-11

100多个Android Demo的集合

几乎涵盖Android的所有组件,来自“安卓巴士”,感谢作者的奉献

2013-02-11

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除