算法
文章平均质量分 86
jackywgw
这个作者很懒,什么都没留下…
展开
-
汉诺塔
1.有三根杆子X,Y,Z。X杆上有若干碟子 <br />2.每次移动一块碟子,小的只能叠在大的上面 <br />3.把所有碟子从X杆全部移到Z杆上<br /><br />#include <iostream><br />using namespace std;<br /><br />void move(int n, char x, char y, char z)<br />{<br /> if(n >= 1)<br /> {<br /> move原创 2011-03-01 16:11:00 · 832 阅读 · 0 评论 -
快速排序算法
#include <stdio.h> #include <st原创 2017-11-01 14:59:10 · 368 阅读 · 0 评论 -
输入一个链表的头结点,从尾到头反过来输出每个结点的值
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:这是一道很有意思的面试题。该题以及它的变体经常出现在各大公司的面试、笔试题中。看到这道题后,第一反应是从头到尾输出比较简单。于是很转载 2011-12-19 16:35:04 · 737 阅读 · 0 评论 -
给定链表的头指针和一个结点指针,在O(1) 时间删除该结点
题目:给定链表的头指针和一个结点指针,在O(1) 时间删除该结点。链表结点的定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};函数的声明如下:void DeleteNode(ListNode* pListHead, ListNode* pTo转载 2011-12-19 16:38:32 · 632 阅读 · 0 评论 -
八皇后问题http://www.kuqin.com/tiku/c100/
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。原创 2011-02-24 23:13:00 · 882 阅读 · 0 评论 -
Aho-Corasick算法
开源AC算法链接:https://sourceforge.net/projects/multifast/files/AC_AUTOMATA_t * ac_automata_init (){ AC_AUTOMATA_t * thiz = (AC_AUTOMATA_t *)malloc(sizeof(AC_AUTOMATA_t)); /*分配AC原创 2016-03-23 18:21:18 · 1485 阅读 · 0 评论 -
KMP 算法 ---经典
The Knuth-Morris-Pratt Algorithm in my own words(http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html)For the past few days, I’ve been reading v转载 2016-07-15 17:38:56 · 389 阅读 · 0 评论 -
数组中超过一半的数字
题目:数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过了数组长度的一半,因此输出2.#include #include int check_more_than_one_half(int array[],int len,int value){ int i; in原创 2016-07-11 16:07:57 · 361 阅读 · 0 评论 -
快速排序中的partition算法
简介partition算法用途是:有一个数组array[]和其中任意一个数组元素x,修改数组,将数组中小于x的元素都移到x的左边,将大于x的元素都移动x的右边返回值: 返回值为最终x在数组中的索引值。void swap(int *x, int *y){ int tmp; tmp = *x; *x = *y; *y = tmp;}int partition(int arr原创 2016-07-11 14:46:25 · 1022 阅读 · 0 评论 -
和为s的两个数字VS和为s的连续正数序列
1. 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。例如输入数组{1、2、4、7、11、15}和15。由于4+11=15,因此输出4和11。#include #include int increase_array_sum(int a[], int len, int sum){ int i,原创 2016-06-12 15:59:44 · 730 阅读 · 0 评论 -
数组中只出现一次的数字
一个整形数组里除了一个数字之外,其它数字都出现了两次,请写程序找出这一个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1).如输入数组{2,4,3,6,3,2,5,5,6} ,只有4出现了1次。原理: 任何两个相同的数字异或的结果是0.#include #include int one_time_int(int array[],int len){原创 2016-06-07 11:07:50 · 283 阅读 · 0 评论 -
二叉查找树BST
linux已经实现了二叉树的查找,增加,删除。TSEARCH(3) Linux Programmer’s Manual TSEARCH(3)NAME tsearch, tfind, tdelete, twalk, tdestroy - manage a binary treeSYNOPSIS #i原创 2016-04-05 16:05:01 · 516 阅读 · 0 评论 -
Blizzard One-Way Hash
#include #include //#include "hash.h"unsigned long cryptTable[0x500];typedef struct hash_s { unsigned long nHash; unsigned long nHashA; unsigned long nHashB; int bExists;}hash_t;原创 2016-03-31 17:40:03 · 1317 阅读 · 0 评论 -
输入一个正数n,输出所有和为n 连续正数序列
题目:输入一个正数n,输出所有和为n 连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5、4-6 和7-8。 思路:就简单的方法就是两重循环,算这两个标志之间的和! 代码:Java代码 public static int sum(int begin转载 2011-12-19 16:36:29 · 1055 阅读 · 0 评论 -
c语言排序算法
<br />最近又重新温习了一下排序算法,自己重新写了一下代码:<br />1.插入排序void InsertSort(int a[],int N){int i,j;int tmp;for(i = 1 ;i < N;i++){tmp = a[i];for(j = i-1;j >=0 ;j--){ if(a[j] < tmp){ break; }a[j+1] = a[j];}a[j+1] = tmp;}}2. shell排序(希尔排序) 增量选择了5,3,1void InsertSortByInc(int原创 2011-06-01 21:50:00 · 473 阅读 · 0 评论 -
从1到100,每数到7的时候,把该数字提出来,剩下的数字继续循环,问最后剩下的一个数字是多少。
<br />题目: 从1到100,每数到7的时候,把该数字提出来,剩下的数字继续循环,问最后剩下的一个数字是多少。<br />思路:使用循环链表<br /> <br />代码:<br />#include <iostream><br />using namespace std;<br />const int totalnum = 100;<br />typedef struct NUMBER<br />{<br /> int num;<br /> struct NUM原创 2011-02-16 13:58:00 · 1215 阅读 · 0 评论 -
基于字符串的分离链接hash算法
Hashes 问题:你有一个很大的字符串数组。需要知道另外一个字符串是否在这个字符串数组中。你可能会将这个字符串与数组中的字符串依次作比较。但是实际中,你会发现这种方法太慢。必须找其它的方法。但是除了依次比较字符串外,还有没有其它方法来知道某个字符串是否存在呢? 解决方案: Hashes。 Hashes是用小的数据类型(如,数字)来表示其它大的数据类型(通常是字符串)。原创 2017-10-25 14:56:03 · 365 阅读 · 0 评论