![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
迪云的积木
因为相信,所以看见!
展开
-
求最大公约数的几种算法分析
题目——求两个整数的最大公约数思路1、穷举算法 public static voidmain(String[] args) throws IOException {Scannerscanner = new Scanner(System.in);inta = scanner.nextInt();intb = scanner.nextInt();System.out.println(原创 2014-06-04 21:59:48 · 1833 阅读 · 0 评论 -
以另一种位图的思想来解决一道OJ题目
前言:以前所接触到的位图的思想都是以1位的形式去存储某个数出现的次数是1次还是0次。常见的例子不外乎在《编程珠玑》上的开篇例子里,1千万个数的排序统计,用1.25M的内存空间就可以达到遍历一遍输入数据而排序好的目的。这种思想是通用的么?也就是说,假如输入数据不再是0次或者1次,而是2次或者更多的时候,如何再次用上这种思想呢?请看下面题目题目:输入一个数组,数组有int类型整数若原创 2014-08-16 14:33:19 · 929 阅读 · 0 评论 -
算法之逆序对问题求解
题目: 给出一列数,a1, a2,....到 an,求它的逆序对数。逆序对就是 下标 i 比 j小,但是值 ai 却比 a j大。n 可以高大 10万。 思路:(1)穷举,肯定不现实的,因为n 可以高达10万,肯定超时;(2)考录分治法,受到归并排序的启发,能不能不断划分数组到最小,然后合并时统计 逆序对数。划分和递归都和归并排序没什么区别,问题在合并时如何统计。合并左右两个数原创 2014-09-11 21:02:09 · 2619 阅读 · 0 评论 -
选择问题的算法
1、什么叫选择问题: 设有一组N个数,而要确定其中第K个最大者。 2、问题的解法:解法1:最容易想到的一种解法就是将这个N个数读入一个数组,然后通过某个比较简单的排序算法,如冒泡法,以递减顺序将数组排序,然后位置K上的数就是想要的第K个最大数。总的时间复杂度为O(n*logn +k)。 解法2:可以先把K个元素读入数组,然后以递减的顺序排序,接着原创 2013-11-07 13:17:38 · 1836 阅读 · 0 评论 -
快速排序为什么快?
这是曾经思考过的问题,它为什么叫快速排序呢?思考无果,然后忘记了,然后昨天被问起,自然想不出很好的答案。直到,看到了《暗时间》上有这个问题的答案。 在《暗时间》里,作者刘未然并没有直接给出答案,而是先说了两个游戏,猜数字和称球。这两个问题都很好理解,并且不难解答。然而,令我豁然开朗的是,他们指向了同一个思想,分而治之!把问题不断切割一半又一半,直到答案水落石出。 回到正题,我们原创 2014-08-08 01:20:01 · 16297 阅读 · 3 评论 -
算法笔记2-优先队列(堆)(上)
一、什么是优先队列?看一情景:我们去KTV唱歌,点歌的时候,可以发现所点的歌就是一个队列。这时候,一个MM突然不玩手机了想唱歌,于是她来点歌,并且想尽早轮到她。于是她可以选择“插歌”这个功能插到前排队列里。这种具备可以插入优先权元素的队列,就叫优先队列。但是,这个定义不是严谨的。优先队列的基本模型是这样的—— 具备两个功能:insert插入;dele原创 2014-06-22 23:25:22 · 911 阅读 · 0 评论 -
算法笔记1-最大子序列和问题的求解
问题——给定N个整数(有可能是负数)A1,A2,A3,A4...An,求最大子序列和。(子序列必须是连续的);比如,对于输入,-2,11,-4,13,-5,-2;这个序列,答案是20,即从A2到A4。 对于这个问题,你怎么想的呢?下面有四种解法,看看你的解法是不是其中之一。解法一、穷举解题思路——既然是求某一个连续的子序列的最大和,那么我们把所有的子序列的和都加一遍原创 2014-06-21 23:49:01 · 1356 阅读 · 0 评论 -
算法笔记之堆排序
一、对堆排序的相关了解1、堆排序的运行时间是 O(nlogn);2、定义:堆heap是一棵具有以下属性的二叉树——(1)它是一棵完全二叉树;(2)每个结点大于或等于它的任意一个孩子。 备注:完全二叉树的定义——除了最后一层没填满以及最后一层的叶子都是偏左放置的,其他层都是满的二叉树! 3、二叉堆有两种:最大堆和最小堆。在堆排序中我原创 2014-07-31 21:03:38 · 1217 阅读 · 0 评论 -
算法笔记之动态规划
1、以故事的方式来讲述何为动态规划在看了MIT的算法导论教学视频后,我对动态规划的思想依然不太清楚。直至到我看到这么一篇文章,这么一个故事。一个聪明的国王与金矿的故事。http://www.cnblogs.com/sdjl/articles/1274312.html 看完总结:引用百度百科对动态规划的定义——把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解原创 2014-07-07 00:04:21 · 1238 阅读 · 1 评论 -
算法笔记之快速排序
1.1算法思路——该算法在数组中选定一个元素作为主元(一般选第一个),然后以这个主元为参考对象将数组分为两个部分,第一部分都是小于或者等于主元,第二部分都是大于或者等于主元。然后对第一和第二部分递归地使用快速排序算法,直到分到最小的小组为止。1.2时间复杂度——在最差的情况下,要把n个元素的数组划分,需要n次比较和n次移动。假设用T(n)来表示使用快速排序算法来排序n个元素原创 2014-07-24 01:50:34 · 1565 阅读 · 0 评论 -
算法笔记之归并排序
4、归并排序4.1算法思想——将数组分为两半,对每部分递归地应用归并排序,直到最后的子数组只包含一个元素。在每部分都排好序后,对它们进行合并。4.2时间复杂度——假如用T(n)表示使用归并排序对n个元素构成的数组进行排序而使用的时间,用mergeTime来表示将两个子分组合并起来而花费的时间。那么T(n) = T(n/2)+T(n/2) + mergetime而me原创 2014-07-22 02:07:57 · 953 阅读 · 0 评论 -
复习排序算法
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); int[] array = new int[num]; for原创 2014-07-19 01:33:44 · 602 阅读 · 0 评论 -
编程之美读书笔记-2 分层遍历二叉树
一、题目问题1——给定一个棵二叉树,要求分层遍历该二叉树,即从上而下按层次访问该二叉树(每一层单独输出一行),每一层要求访问的顺序是从左到右,并将结点依次编号,如遍历如下的二叉树,输出顺序应该是12 3 4 5 67 8 问题2——写一个函数,打印二叉树中的某层次的节点(从左到右);其中根结点是0层,成功则返回1,失败返原创 2014-06-25 23:55:55 · 741 阅读 · 0 评论 -
剑指offer之重建二叉树
1、题目 很简单,知道yike原创 2014-09-04 13:39:42 · 1225 阅读 · 0 评论