自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 使用脚本来提高工作效率

脚本语言可以减少很多手动的操作,作为一个Linux程序员都应该了解简单的脚本编写来代替手动的操作,我也是很久以前学习过一段shell脚本程序编写,大概有一年多没有写过了,现在只记得一些基础的语法。先说说我的需求,我写了一个循环队列的接口,然后写了一个测试程序来测试循环队列,现在我想让这个测试程序执行多次来看是否有段错误(产生core文件)来测试这个循环队列接口的稳定性。首先现在程序执行目录

2016-07-10 09:18:17 878

原创 我们聊聊快排吧...

最近一直在看《编程珠玑》第二版这一本书,里面的东西真的很实用,以前也看过不少讲解快排的书,但是在编程珠玑上看到的讲解是我见过最好理解,也是最详细的,从效率和空间以及实现等各个方面都做了详细说明,并比较了几种变形的快排的效率,所以在这把我看到的内容写出来记录,留着以后忘了的时候看。1.1.插入排序首先说一下插入排序,这个会在最后的变形快排中用到,插入排序类似于整理扑克牌的方式,假设之前的序列

2016-07-10 09:18:12 803

原创 IP trie树接口

前两天其他项目组的同学说他们项目中的IP黑白名单要用到trie树,于是我好奇也自己实现了一个IP trie树接口.在这里保存一下,方便备份以后使用,同时欢迎纠错和交流,希望有大神能指教更高效的算法.1.头文件如下(iptrie.h) 1 #ifndef _IP_TRIE_H_ 2 #define _IP_TIRE_H_ 3 4 #define SPLIT_SIGN "

2016-07-08 20:00:36 998

原创 一个别人问我的多叉树的问题....

问题描述:这是她的项目里的一个需求好像要做什么聚类的,但是我不太懂,只是用我的思路解决了问题...输入:一个字符串数组,数组中的每个字符串的格式为A B,AB中间有一个空格,A和B是源IP和目的IP.输出:输出所有的A B B C C D形式的串,即数组中的字符串的后半部分和另一个字符串的前半部分相同的话就要成一条链,但是扫描到一个字符串的时候不用考虑他前面串是否满足该特性.

2016-07-08 20:00:32 518

原创 树的深度优先遍历和广度优先遍历非递归实现.

注:树的深度优先遍历就是二叉树的先序遍历.(我写的深度优先遍历可能有点奇怪,不是按照那种一次遍历到左子树的结点那种方式写的)下面是我用java实现的代码. 1 package com.datastruct; 2 3 import java.util.LinkedList; 4 import java.util.Stack; 5 6 public class Tr

2016-07-08 20:00:27 460

原创 帮助大家理解一下递归函数的返回值...

如题:递归函数往往可以简化我们的代码,尤其是对树的遍历和利用回溯算法写代码的时候,但是递归函数的返回值往往是困扰我们的。总体来说,我们先要理解函数的调用过程,函数调用过程会用栈来保存函数的返回值和过程,而递归函数就是调用自身函数的过程,所以也是用栈存储,这样就比较容易理解了。下面一段代码可以帮助大家理解递归函数的返回值。 1 package test; 2 3

2016-07-08 20:00:22 8390

原创 使用散列表来降低时间复杂度

题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。  1 /* 2 *思路: 3 *查找数组中重复的数字: 4 *

2016-07-08 20:00:18 1228

原创 写代码一定要注意边界问题,要考虑全面开始的边界以及结束的边界,已防止出现严重的错误。

注意边界,注意边界,注意边界,重要的的问题说三遍题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词

2016-07-08 20:00:13 914

原创 真的就有人可以用两三行代码实现你写了几十行代码的功能.....

问题描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 1 /* 2 *比较两个数字拼接字符串时,谁排在前的call back 函数 3 * 4 *比较条件为将两个整数转换成字符串后,从最高位开始比,如果小的

2016-07-08 19:02:38 537

原创 小顶堆第二弹-----堆降序排序(C语言非递归)

现在po一下C语言版本的,留作以后接口使用. 1 #include 2 #include 3 4 #define HEAP_SIZE 100 5 #define HEAP_FULL_VALUE -100 6 7 #if 0 8 /*小顶堆存储结构*/ 9 typedef struct small_heap 10 { 11 i

2016-07-08 19:02:33 546

原创 小顶堆---非递归C语言来一发

1 #include 2 #include 3 4 #define HEAP_SIZE 100 5 #define HEAP_FULL_VALUE -100 6 7 #if 0 8 /*小顶堆存储结构*/ 9 typedef struct small_heap 10 { 11 int data[HEAP_SIZE]; 12

2016-07-08 19:02:28 367

原创 大顶堆第二弹----堆排序(递归实现)

1 package com.datastruct; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 6 public class BigHeap { 7 8 9 10 /* 11 *交换堆中的两个元素 12

2016-07-08 19:01:36 341

原创 大顶堆(递归实现)

//简单用java实现一下堆的数据结构 1 package com.datastruct; 2 3 import java.util.ArrayList; 4 5 public class BigHeap { 6 7 8 ArrayList heapList = new ArrayList(); 9 1

2016-07-08 16:28:02 586

原创 递归程序最难写......

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。  代码如下,java依旧:import java.util.ArrayList;import java.util.Collections;import java

2016-07-08 16:27:57 702

原创 代码的鲁棒性......

又是一道牛客网的问题。描述如下:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路:这题可以用插入排序的思想解决。如果不喜欢复杂的操作就创建一个新链表来对两个链表合并,否则可以使用其中一个链表作为插入的链表,不过那样会有很多节点断链以及修复链的操作,我使用的是新链表的方法,用空间换时间。注:由于在指针操作的过程中经常涉及到形

2016-07-08 16:27:53 868

原创 已知二叉树的前序和中序遍历,重构该二叉树

这套题来自于牛客网剑指offer的第四题,由于本题涉及到了对树的递归操作,而且在边界上自己计算时犯了小错误,这里记录一下:题目描述如下:题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 

2016-07-08 16:27:48 500

原创 计算一个整数二进制中1的个数

这是来自牛客网关于一个二进制的运算我的思路为每次和1 2 4 .....进行按位与运算就可得到二进制中1的个数代码如下 1 /* 2 * *new coder ponint to offer 11 3 * find bit 1 num of a nunber 4 */ 5 6 #include 7 #include 8 9 int f

2016-07-08 16:27:44 283

原创 二分查找----(返回第一个找到的值)

二分查找需要注意两个问题一个是临界问题,流行的方案是左开右闭区间方式,还有一个就是当数组元素中有多个相同待查找值的应该返回第一个,下面的代码可以解决这问题,记录一下,由于最近开始用gvim编程了,请原谅我的中式英语注释。 1 /* 2 * binary search from programing perls 3 * this binary search can solve t

2016-07-08 16:27:37 685

原创 二分查找----第一种(相同元素返回不确定哪个)

1 /* 2 *binary search 3 *just return a value position equals the find but may not the first one 4 *we should caution the left open right close or left close and right close rules to not happ

2016-07-08 16:27:35 429

原创 一个自己编写的简单AC自动机代码-----AC automata get √

最近一直在优化项目中字符串匹配的问题,于是就想起了自动机,之前也看过一些文章,一直没有实现,现在项目中要用,然后又看了一些关于AC自动机的文章,这里实现了一个简单的AC自动机的小接口,我是实现自动机状态结构采用了trie树,实现起来简单一些,但在一定程度上造成空间复杂度的增加,欢迎大家纠错和一起交流经验,下面是代码。 1 #include 2 #include 3 #in

2016-07-08 16:27:30 848

原创 KMP算法介绍

kmp算法是一个效率非常高的字符串匹配算法,这篇文章是我看了一篇介绍kmp的算法的其他人的博客然后自己加上了理解和新的图解和自己实现的代码完成的,原作者的博文位置我找不到了,抱歉...kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置。常规方法是遍历f的每一个位置,然后从该位置开始和O进行匹配,但是这种方法的复杂度是O(nm)。k

2016-07-08 16:27:19 293

原创 好东西并查集

今天在做杭电BestCoder30期题目的时候遇到了问题,于是看了解决方案说是要用到并查集,于是就知道了这个神奇的东西。简单介绍一下并查集:并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的数组所在的集合合并。 简单的并查集由两个函数和一个数组组成:1.数组Pre

2016-07-08 16:27:15 268

原创 自己编写一个数组去掉重复元素的函数

自己研究编了一个数组去重的函数,有好的意见或思想欢迎和我一起分享! 1 #include 2 #include string.h> 3 4 #define MAX_FRIEND 100 5 6 int repeats_num[MAX_FRIEND]; 7 8 /*升序排序*/ 9 int comp_int_inc(void *a,void *b)

2016-07-08 16:27:10 1246

原创 杭电OJ BestCoder28期1001Missing number问题(小技巧偏移法)

1.先描述一下问题:小yb有一个排列,但他不小心弄丢了其中的两个数字。现在他告诉你他现在手上还有哪些数字,需要你告诉他他丢了哪两个数字。输入描述有多组数据,第一行为数据组数T(T≤10)。对于每组数据,第一行为一个正整数n,表示yb现在手上有的数字个数。在接下来一行有n个整数,保证所有数字互不相同且合法。1≤n≤1,000输出描述对于每组数据,输出两个数字,为排列缺少的

2016-07-08 09:53:10 545

原创 介绍一个二次排序的小技巧(best coder27期1001jump jump jump)

先来描述一下问题:问题描述有n小孩在比赛跳远,看谁跳的最远。每个小孩可以跳3次,这个小孩的成绩就是三次距离里面的最大值。例如,一个小孩跳3次的距离分别时10, 30和20,那么这个小孩的成绩就是30。给出每个孩子三次跳的距离,问最终每个孩子的排名是多少。问题分析:方法1:  由于原问题规模较少,只有两个或三个孩子,可以采用暴力的方法解决,也可满足时间在1s之内(除java代码)。方法2: 

2016-07-08 09:53:05 439

原创 ntohs的一个简单实现(将网络流中用两个字节16进制表示的资源数(如DNS)和长度转换为整形)

我们知道在由于大端机和小端机导致网络字节序和主机序有可能是有差异的,我们可以使用系统的ntohs,ntohl,htons和htonl这些处理函数进行转换,下面是我写的一个关于ntohs在处理小端机字节序转换的函数的简单实现.思想大致如下:用u_int16_t的2字节16位的整形变量来存储这个整数,首先将第一个字节和该变量进行或运算,运算结果左移八位,于是刚才的第一个字节结果就到了高八位,然

2016-07-08 09:52:47 1322

原创 一个节省空间的小技巧

我们往往习惯将运算过程的临时结果存储起来,这样的思想比较容易理解也是惯性的思维,然而往往大多数情况下我们不需要存储中间过程的变量。这里举一个例子,杭电OJ的1003题MaxSum,虽然同时采用暴力求解,但是中间的sum结果不采用二维数组存储而只是简单的通过每次置0后重新计算这样就可以节省空间。虽然超时了,但是还是将代码粘贴下来,来警醒自己该丢弃的丢弃,不要有惯性思维。 1 /*1

2016-07-08 09:52:42 544

空空如也

空空如也

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

TA关注的人

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