编程珠玑
文章平均质量分 74
pein0119
这个作者很懒,什么都没留下…
展开
-
在存有10亿个数的文件中找到最大的100万个数
这是《编程珠玑》中的一道题目。10亿个整数,假设每个整数需要四个字节,如果使用排序的话,需要大约4G的内存,现在的很多pc都没有多这么内存,更不用说作者那个年代。 我们借助最小堆来解决这个问题。 主要步骤: 一、使用一个大小为一百万零一的整数数组来构建堆(堆的下标从1开始) 二、从文件中读取前一百万个数,每读入一个数,调用函数,保持其最小堆的性质,堆的根永远是堆中最小的元素。 三、从一百原创 2013-08-08 19:12:53 · 3353 阅读 · 0 评论 -
在相邻元素相差1的数组中查找某一特定元素第一次出现的位置(非遍历)
问题描述: 有一数组,数组中相邻两个元素之间的差值为1,例如table数组:[2, 3, 4, 5, 4, 5, 6, 7, 8, 9] ,给定某个数,如何最快定位该数第一次出现的位置。 思路: 我们要充分利用“相邻元素之间的差值为1”这个条件。假设我们要查找“7”这个元素,将table[0]与"7"比较,由于table[0]的值为2,不相等。此时我们要比较的下一个元素是table[ a原创 2013-09-14 13:47:06 · 1867 阅读 · 0 评论 -
检测链表中是否存在循环
翻译自(http://www.crazyforcode.com/write-program-detect-loop-linked-list/) Floyd算法 这个问题可以使用两个指针来解决,一个快指针,一个慢指针。开始时这两个指针都指向链表头部。慢指针每次向下移动一个节点,快指针每次向下移动两个节点。如果链表中存在循环,快指针和慢指针就会相遇。 struct node {翻译 2013-09-14 14:50:43 · 1368 阅读 · 0 评论 -
消除链表中的循环
在上篇文章--"检测链表中是否存在循环"(http://blog.csdn.net/iccav/article/details/11682089)中介绍了如何检测链表中的循环,这篇文章介绍一下如果消除循环。 图片来自(http://www.crazyforcode.com/write-program-detect-loop-linked-list/) 问题描述: 假设我们有一个链表,链表原创 2013-09-16 23:30:11 · 948 阅读 · 0 评论