一些有趣的算法
文章平均质量分 60
zhengzhon
cant forget you when depressed
展开
-
字符串中最长的数字串
返回一个以“\0”结束的字符串中提取最长的数字串不能使用任何库函数或已经存在的函数,如strlen#include #include char* maxnum(char *source){ char *a = source,*temp,*dest; int maxlen = 0,len = 0; while(*a++){原创 2014-03-16 10:08:47 · 5063 阅读 · 0 评论 -
返回链表中间节点指针
如果个数是奇数就返回中间节点,如果是偶数,就返回任意一个。主要是能想到用2个指针,一个指针一次走一步,另一个指针一次走2步#include #include typedef struct node{ int a; struct node *link; }mynode;int creat_tail(mynode *head,int原创 2014-03-25 14:52:55 · 5232 阅读 · 0 评论 -
“用最小堆将k个已排序链表合并为一个排序链表”(算法导论 练习6.5-9)
问题:请给出一个时间为O(nlgk),用来将k个已排序链表合并为一个排序链表的算法。此处的n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并)编程思路:假设k个链表都是非降序排列的。(1)取k个元素建立最小堆,这k个元素分别是k个链表的第一个元素。建堆的时间复杂度O(k)。(2)堆顶元素就是k个链表中最小的那个元素,取出它。时间复杂度O(1)。(转载 2014-06-08 17:20:29 · 1343 阅读 · 0 评论 -
输出链表倒数第n个节点数据
考虑特殊情况:1. 链表头指针为空,n小于等于0是错误输入2. 链表实际节点数小于n因此代码:#include #include typedef struct node{ int a; struct node *link; }mynode;int creat_tail(mynode *head,int n){原创 2014-03-25 14:30:47 · 4842 阅读 · 0 评论 -
文件中的记录排序
你现在有一个文件,文件中顺序存有N个记录,R1,R2,...,RN,这些记录不是有序的,但是你知道一个整数M,这些记录满足R11,设计一个算法或编写一个程序,将文件中的记录排序为R1'2,设计一个算法或编写一个程序,将文件中的记录排序为R1' 1.就是两个有序数组的合并了,时间复杂度确实是O(N),好说2.第一个限制空间, or 内存不够时就是外部排序了.主要就是读写文件了.转载 2014-03-16 10:32:40 · 4906 阅读 · 0 评论 -
公司员工的年龄排序
取值范围一定(0-100),且远小于记录数的排序(可能上万)。这是如果可以使用O(n)的辅助空间,可以使时间复杂度降低到O(n)。用age[10]模拟年龄1-10。25个数据模拟员工数。age数组记录下标表示的年龄人数。统计完age相当于排好了序,然后写入data数组就可以。#include #include void sort(int data[],int length){原创 2014-03-23 22:57:36 · 5266 阅读 · 0 评论 -
奶牛生子
一只刚出生的奶牛,4年生1只奶牛(因为这里描述不清,我暂且认为是第四年开始的时候生小牛),以后每年生1只,现在给你一只刚出生的奶牛,求20年后有多少奶牛?网上有类似的代码,但是感觉有问题,这里是自己想的算法,时间、空间复杂度n。#include using namespace std;int son(int n){ int year[4] = {1},i; f原创 2015-01-05 15:17:06 · 911 阅读 · 2 评论