
算法
顾国玉
这个作者很懒,什么都没留下…
展开
-
Java 求两个整数中的最大公约数
辗转相除法(欧几里得算法)点击打开链接 对要求最大公因数的两个数a、b; 设b<a,先用b除a,得a=bq+r1(0≤r1<b); 若r1=0,则(a,b)=b;若r1≠0,则再用r1除b,得b=r1q+r2 (0≤r2<r1); 若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1……如此循环,直到能整除为止。其最后一个非零余数即为(a...原创 2018-03-30 20:56:58 · 2747 阅读 · 0 评论 -
堆排序算法(图解详细流程)
堆排序的时间复杂度O(N*logN),额外空间复杂度O(1),是一个不稳定性的排序目录一 准备知识1.1 大根堆和小根堆二 堆排序基本步骤2.1 构造堆2.2固定最大值再构造堆三 总结四代码一 准备知识堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆1.1 大根...原创 2018-08-04 11:21:17 · 241200 阅读 · 152 评论 -
数组模拟栈和队列(图解流程)
一 数组模拟栈栈(stack),它是一种运算受限的线性表。这种限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底,向一个栈中插入新元素,我们一般称为入栈或者压栈,从一个栈中删除元素,我们一般称为弹栈或者出栈,即先进后出入栈过程首先声明一个固定大小的数组arr,并将索引index指向0位置,压入数据的时候,先给arr[index]赋值,再将inde...原创 2018-08-10 21:34:29 · 5138 阅读 · 0 评论 -
快速排序(图解详细流程)
基本思想是:从一个数组中随机选出一个数N,通过一趟排序将数组分割成三个部分,1、小于N的区域 2、等于N的区域 3、大于N的区域,然后再按照此方法对小于区的和大于区分别递归进行,从而达到整个数据变成有序数组。图解流程下面通过实例数组进行排序,存在以下数组从上面的数组中,随机选取一个数(假设这里选的数是5)与最右边的7进行交换 ,如下图准备一个小于区和大于区(大于区包含最右侧...原创 2018-07-26 15:57:25 · 62360 阅读 · 6 评论 -
归并排序解决小和问题 (图解详细流程)
在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。例子:[1,3,4,2,5]1左边比1小的数,没有;3左边比3小的数,1;4左边比4小的数,1、3;2左边比2小的数,1;5左边比5小的数,1、3、4、2;所以小和为1+1+3+1+1+3+4+2=16目录笨办法代码归并排序解决图解流程累加的原理代码笨办法循环...原创 2018-07-23 21:36:02 · 3853 阅读 · 2 评论 -
算法 冒泡排序 插入排序 选择排序
一 冒泡排序存在含有n个元素的数组,每一趟对相邻的两个元素进行大小判断,大的放到后面,这样一趟下来,最大的元素将放到最后,此时,最后的元素固定不动,第二趟再继续循环前面的n-1个元素,循环n趟后,整个数组排序完成循环次数 比较次数 1 n-1 2 n-2 ... ... n-1 1 从比较次数可以看得出总共比较次数为:(n-1)+(n...原创 2018-07-18 15:41:08 · 355 阅读 · 0 评论 -
算法 归并排序的复杂度分析(含图解流程和Master公式)
通过图解分析归并排序流程,以及使用Master公式计算时间复杂度原创 2018-07-11 23:46:47 · 6613 阅读 · 2 评论 -
算法 二分查找的时间复杂度为O(log2N)的原因推理
时间复杂度概念还不清楚的可以先看我的下面这个文章: https://blog.youkuaiyun.com/u010452388/article/details/80875958由于二分查找每次查询都是从数组中间切开查询,所以每次查询,剩余的查询数为上一次的一半,从下表可以清晰的看出查询次数与剩余元素数量对应关系表-查询次数及剩余数 第几次查询 剩余...原创 2018-07-02 23:56:03 · 20404 阅读 · 0 评论 -
算法 时间复杂度概念及案例
通过时间复杂度可以判断程序算法过程的优势和劣势,提高运行性能原创 2018-07-01 17:50:50 · 4788 阅读 · 1 评论 -
算法(第4版) 编写一个静态方法lg(),接受一个整型参数N,返回不大于log2N的最大整数。(不要使用Math库)
解题思路:1.设要求的数为k 2.则k<=log2N 3.即2的k次方小于等于N 4.第三条中2的k次方肯定大于0,以及题目要求一个整形参数N 5.可以肯定N为正整数,k的值为0或正整数 6.代码中设M为2的k次方,从k=0时开始循环,即M=1java代码: public static void main(String[] args) { int k = lg(18原创 2018-05-03 16:32:04 · 1097 阅读 · 0 评论 -
java 算法 将一个二维数组转置打印
第一种方法:通过改变二维数组输出的方式(格式反转打印)//先定义一个二维数组 int[][] arr=new int[3][4]; //循环给二维数组赋值 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j...原创 2018-05-03 14:35:45 · 2448 阅读 · 0 评论 -
实现一个栈,要求pop push getMin的时间复杂度都是O(1)【图解流程】
完整题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。【要求】1. pop(弹栈)、push(入栈)、getMin操作的时间复杂度都是O(1)2. 设计的栈类型可以使用现成的栈结构实现思路1.首先准备两个栈,一个是data栈,一个是min栈2.第一数入栈的时候,data栈和min栈都插入这个数,后面再有数入栈的时候,data栈正常入栈,入...原创 2018-08-14 14:51:08 · 3801 阅读 · 2 评论