自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 交错序列

题目描述我们定义一个由数字 0 和 1 组成的序列是交错序列,当且仅当在这个序列中 0 和 1 是轮流出现的,比如 0,010,10101都是交错序列。现在给出了一个由数字 0 和 1 组成的序列A,它可能不是一个交错序列,但是你可以从这个序列中选择一些数字出来,按他们在序列A中原有的相对顺序排列(即选取A的一个子序列),使得最后你得到的是一个交错序列。问这样能得到的交错序列的最长长度是多

2017-09-02 10:21:06 1434

原创 字符全排列

1.递归实现无重复字符的全排列输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印abc,acb,bac,bca,cba,cab分析全排列主要分为两个步骤:(1)将各个字符依次与第一个字符交换;(2)固定第一个字符,对后面的字符进行全排列。代码#include void Swap(char* input, in

2017-08-19 17:45:13 620

原创 判断合法的压缩字符

华为机试题:简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,例如:“aaabbccccd”压缩为“3abb4cd”。判断输入的字符串是否为合法压缩过的字符串,若输入合法则输出解压后的字符串,否则输出“!error”。输入:3abb4cd输出:aaabbccccd分析非法字符共有三种类型:1.

2017-08-13 09:36:19 1288

原创 散列查找

简要步骤若找到元素与其在数据集中的位置存在的某种对应关系,那么就能通过这种关系找到数据的位置。这种对应关系被称为散列函数(哈希函数),通过这种函数简历的表被称为散列表(哈希表)。在构建哈希表的过程中也可能会产生冲突(也就是产生了相同的哈希值),所以解决冲突也是构建哈希表重要的组成部分。构造哈希表1. 直接定址法根据哈希函数f(key) = a * key + b建立

2017-08-13 09:31:03 467

原创 二分查找

简要步骤二分查找也被称为折半查找,它是比顺序查找效率高的一种查找方法,但是它只适用于有序数据序列。我们以升序序列为例,首先,将序列中间位置的元素与查找元素比较,如果相等则查找成功;若不相等,就从中间位置将序列分为左、右两个子序列,当中间元素大于查找元素时,则在左子序列中继续二分查找,否则在右子序列中继续二分查找。重复上述步骤直到中间元素与查找元素相等,则查找成功;若出现已经无法分为左、

2017-08-13 09:21:52 267

原创 基数排序

简要步骤与计数排序一样,基数排序也属于分布类排序。它设定一些基数(也被称为“桶”),通过将待排数据分配至“桶”中进行排序。以整数为例,我们将基数设定为0~9,根据高低位遍历顺序的不同,基数排序分为最高位优先(MSD)和最低位优先(LSD),MSD适合大位数的数列排序,LSD则相反,本文采用的是LSD基数排序。初始序列{0, 11, 51, 22, 74, 122, 341, 4, 71,

2017-08-13 09:01:11 243

原创 计数排序

简要步骤计数排序顾名思义,就是通过对待排序列计数来达到排序的目的。直接上图因为计数排序针对小范围内的整数效果比较好(能够转化为整数的数据也能适用),所以将初始序列设定为{0, 1, 5, 2, 4, 2, 3, 4, 1, 2}性能分析时间复杂度:O( N+k ),k为整数的范围。但是当满足以下两个条件时为O( N ),分别为1. 输入的线性表的元素

2017-08-06 13:56:07 247

原创 归并排序

简要步骤将待排序列arr[n]看作是n个长度为1的有序序列,将相邻的有序序列合并成n/2个长度为2的有序序列,再将相邻的有序序列合并,直至最后得到一个长度为n的有序序列。初始序列:{ 4, 6, 3, 0, 2, 5, 1 }两个相邻序列合并过程详解:性能分析时间复杂度:归并排序的形式和二叉树类似,遍历次数就是二叉树的深度,所以时间复

2017-08-05 09:46:25 266

原创 堆排序

简要步骤堆是一棵完全二叉树。其中每个节点的值都不大于其父节点的堆,被称为大根堆;其中每个节点的值都不小于其父节点的堆,被称为小根堆;在非降序排列中,需要使用的是大根堆。以上图中的大根堆序列arr[7]为例,arr[0]的左孩子是arr[1],右孩子是arr[2];arr[1]的左孩子是arr[3],右孩子是arr[4]。所以arr[i]的左孩子节点是arr[2*

2017-08-05 09:32:39 1097

原创 希尔排序

简要步骤希尔排序是一种直接插入排序的优化排序方法。它通过设定的步长进行分组,对每组中的数据进行直接插入排序,随着步长的减少,每组中的数据也随着增加,直到步长减少为1,那么整组数据也就变为有序的了。初始序列:{ 4, 6, 3, 0, 2, 5, 1 }大体上来说,希尔排序就是通过以一定步长分组后对数据进行预处理,来减少最后步长为1时的工作量。性能分析

2017-08-05 09:23:53 381

原创 直接插入排序

简要步骤直接插入排序正如名字所示,它的工作过程就是:对于一个待插数据,将其与前面的数据依次比较,直至找到正确的插入位置。初始序列:{ 4, 6, 3, 0, 2, 5, 1 }和简单选择排序相比,直接插入排序当找到正确的位置时,扫描就停止了;而简单选择排序即使在正确的位置放上了正确的数,它也会继续扫描完,因为它不知道后面有没有数比这个数好。例如序列{1, 2, 4, 5, 3}

2017-08-05 09:09:19 1199

原创 简单选择排序

简要步骤简单选择排序与冒泡排序的区别在于:简单选择排序直接将待排位置的数据与其他未排位置的数据比较,若为反序则交换;而冒泡排序则是将相邻的反序数据进行交换,所以在性能上简单选择排序是略优于冒泡的。初始序列:{ 4, 6, 3, 0, 2, 5, 1 }可以通过比较简单选择排序和冒泡排序在同一初始序列上的第一轮扫描过程,不难发现前者的优势,下面是冒泡排序的博客地址:htt

2017-08-05 08:50:20 411

原创 冒泡排序

简要步骤冒泡排序通过相邻数据的比较寻找较优值,若与要求的顺序相反则交换位置。初始序列:{ 4, 6, 3, 0, 2, 5, 1 }图解说明中只画出了第一轮冒泡情况,也就是i = 0的情况。我们可以发现,每一轮冒泡就是通过相邻数据的比较,把较小值逐渐往上推。第一轮将第一小的值放在i = 0的位置,第二轮将第二小的值放在i = 1的位置,依次类推获得最终排序结果。

2017-08-05 08:40:22 440

原创 非线性结构——图

图的表示表示图的方法通常有矩阵,邻接表,十字链表和邻接多重表。其中十字链表是有向图的一种链式存储结构,邻接多重表是无向图的一种链式存储结构。本篇文章主要就以邻接表为例,如下图:图的遍历通常图的遍历有两种:深度优先和广度优先。深度优先遍历是树的先根遍历的推广,它的基本思想是:从图G的某个顶点开始,选择一个与起始顶点相邻且没被访问过的顶点Vi进行访问,再从Vi出

2017-07-30 20:48:56 2754

原创 快速排序

简要步骤讲排序肯定有必要讲一下快速排序,快排是因为其比较实用的分治思想,所以经常会在面试时遇到,它的基本思想是:第一步:选择基准点,通过一趟排序将准备排序的数据分为两部分,一部分比基准点都小,另一部分比基准点都大;第二步:按照第一步的方法对两个部分分别进行划分,直到数据不能被划分。接下来,我们就通过图片来了解一下快速排序的第一步,如何将待排序数据 s[ n ]划分为两个部分:

2017-07-30 09:57:56 282

原创 非线性结构——树

二叉树的深度求解二叉树的深度比较简单,只要分别计算出左、右子树的深度,然后取较大者加1即为二叉树的深度。直接上代码:/* * 二叉树的深度 */int PostTreeDepth(BiTree root){ int leftheight, rightheight, max; if(root != NULL) { leftheight = PostTreeDepth(

2017-07-22 10:17:36 322

原创 线性结构——队列

前言:基本所有的代码都是在Linux环境下运行,若遇到文件类型问题,在Linux系统下可以使用dos2unix,unix2dos命令改变,在Windows系统下可以使用UltraEdit文本编辑器改变。两个队列实现栈一般的实现方法有两种,其一,只维护一个队列,另一个队列作为临时存放队列;其二,维护两个队列,需要用判断来分辨队列是否为空,避免了多余的进、出队列操作。首先来说说第一种方法:

2017-07-16 09:28:15 285

原创 线性结构——栈

栈是只能在表尾进行插入或删除操作的线性表,栈既然也是线性表,那么它也有顺序存储结构和链式存储结构两种表示方法,一般它被表示为顺序存储结构。十进制正整数转换为二进制/* * 十进制正整数转换为二进制 */void convert(SqStack S, int number){ int temp; while(number) { temp = n

2017-07-15 17:00:21 362

原创 线性结构——单链表

线性表的顺序存储结构是逻辑地址和物理地址都连续,而链式存储结构是逻辑地址连续,但物理地址不一定连续,相比顺序存储结构,它不能随机存取,但在插入和删除操作时不需要移动元素,大大提高了插入和删除元素的效率。本文主要讲一下单链表。单链表的逆序输出单链表的逆序输出不同于反转单链表,逆序输出并不会改变单链表本身的顺序,所以直接使用递归实现:/* * 单链表的逆序输出 */void Prin

2017-07-11 15:52:56 389

原创 最大子序列和问题

最大连续子序列和问题

2017-07-10 22:44:47 276

原创 shell脚本报错

报错——syntax error near unexpected token,报错——bad interpreter: 没有那个文件或目录,在虚拟机中找不到共享文件的位置

2017-07-09 20:55:44 866

原创 shell编程(三)--Linux系统监控脚本

1. 主要命令1.1 uname(查看系统相关信息)uname [选项]-a显示全部信息-m显示架构类型-n显示网络上的主机名称-r显示内核版本-s显示操作系统名称-v显示操作系统版本-p输出处理器类型或"unknown"-i输出硬件平台或"unk

2017-07-09 00:27:32 849

原创 ClusterONE算法详解及优化

1. 引言ClusterONE是由TamásNepusz,Haiyuan Yu和Alberto Paccanaro开发的一个由内聚力(cohesiveness)引导搜索的聚类算法。ClusterONE算法可以主要解决的是蛋白质复合物的类别识别问题,也就是PPI网络中密集子结构的识别问题。ClusterONE算法中,内聚力得分越高则代表了该组蛋白质越有可能是一种蛋白质复合物,但是ClusterO

2017-07-07 15:09:43 4554 11

原创 shell编程(二)--变量

“shell编程”的上一篇文章很多知识点都没有提及,如果确实想学习shell脚本的各位看官们,推荐《Advanced Bash-Scripting Guide》,链接:http://www.tldp.org/LDP/abs/html/1. 内置变量内置变量包括$BASH, $FUNCNAME, $IFS, $REPLY, $*, $@, 其中最后两个的功能是类似的。$BASH:Bash

2017-07-06 16:33:34 327

原创 shell编程(一)--入门

在学习shell编程之前,最好是了解过Linux和Vim基础。直接上个例子:#!/bin/bash#------This is a test------var="Hazard"echo $var > datacat /dev/null > dataecho "data cleaned up!"exit这个例子中,首先将 Hazard 保存到data文本中,之后又将d

2017-07-05 19:37:05 306

原创 多线程归并排序

归并排序是典型的分治算法,所以可以用多线程来解决,在Linux平台上进行多线程编程,必须在编译时链接Linuxthread库,如下图所示:因为比较简单,就直接上代码了,讲各种排序的博客也比较多。#include #include #include #include int *array_master;/* 归并函数 */void merge(int arr[], i

2017-07-05 12:31:43 4267 2

原创 重建二叉树

引言这两天偶然看到一道题,应该是《剑指offer》上的,原题如下:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路在解题之前我们需要知道前序,中序,后序是怎么遍历的,这

2017-07-02 21:43:13 359

原创 浅入快出--递归之汉诺塔(二)

引言“枪炮分长短,佼人有深浅”在第一篇递归方法论的文章中,我们讨论了如何将问题高效地进行分解,以便于提高程序的计算效率,上一篇文章的地址如下:http://blog.csdn.net/huzhiyuan0000000/article/details/73896491求解斐波那契数列是递归方法的简单应用,那么如何使用递归方法解决比较繁琐的问题呢?我们这里就举一个比较经典的

2017-06-29 19:35:04 520

原创 浅入快出--递归之斐波那契数列(一)

递归方法,斐波那契数列

2017-06-29 14:12:06 1003

空空如也

空空如也

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

TA关注的人

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