
算法
文章平均质量分 88
天才之上
路上的风景一片精彩。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
100亿个整数如何找到中位数?内存足够和内存不足两个场景
100亿个整数,内存足够,如何找到中位数?内存不足,如何找到中位数?(1)当内存足够时:采用快排,找到第n大的数。• 随机选取一个数,将比它小的元素放在它左边,比它大的元素放在右边• 如果它恰好在中位数的位置,那么它就是中位数,直接返回• 如果小于它的数超过一半,那么中位数一定在左半边,递归到左边处理(还是第几大)• 否则中位数一定在右半边,根据左半边的元素个数计算出中位数是右半...原创 2019-12-24 15:05:05 · 2299 阅读 · 0 评论 -
二维矩阵顺时针旋转90度
今天仍然来分析一个与数组操作相关的算法,是关于二维数组旋转问题的。问题描述原文You are given an n × n 2D matrix representing an image.Rotate the image by 90 degrees (clockwise).Follow up: Could you do this in-place?大意:给一个 n * ...原创 2019-12-22 14:22:56 · 5916 阅读 · 0 评论 -
数据结构及算法:链表相关(如何判断单链表是否存在环、找出入环点、链表相交等问题)
目录一、如何判断单链表是否存在环方法一、穷举遍历方法二、哈希表缓存方法三、快慢指针(推荐)方法四、Set集合大小变化二、如何找出有环链表的入环点?方法一、用HashSet来解决方法二、计算循环(快慢指针)情况一:多走一个环情况二、当fast比slow 多走n个环代码实现三、如果存在环,求出环上节点的个数;四、如果存在环,求出链表的长度;...原创 2019-06-27 17:03:38 · 1403 阅读 · 0 评论 -
二分查找法
1、前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序2、原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。可能描述得不是很清楚,若是不理解可以去网上找。从描述...原创 2017-11-24 09:57:37 · 255 阅读 · 0 评论 -
Java经典算法例子大全
Java经典问题算法大全/*【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....*/package cn.com.flywater.FiftyAlgorthm;public class FirstRabb...原创 2017-11-24 15:46:41 · 1164 阅读 · 0 评论 -
基础算法:希尔排序
希尔排序,也称递减增量排序算法,1959年Shell发明。是插入排序的一种高速而稳定的改进版本。希尔排序是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。1、基本思想(1)设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,所有距离为i...原创 2019-05-28 11:28:43 · 438 阅读 · 0 评论 -
基础算法:快速排序
快速排序(Quicksort)是对冒泡排序的一种改进,借用了分治的思想,由C. A. R. Hoare在1962年提出。1、基本思想快速排序的基本思想:挖坑填数+分治法。首先选一个轴值(pivot,也有叫基准的),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。2、算法描述快速排...原创 2019-05-27 18:40:22 · 256 阅读 · 0 评论 -
基础算法:冒泡排序
1、基本思想冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。2、算法描述冒泡排序算法的运作如下:①. 比较相邻的元素。如果第一个比第二个大,就交换他们两...原创 2019-05-27 18:31:09 · 191 阅读 · 0 评论 -
基础算法:选择排序
算法图示1、基本思想选择排序的基本思想:比较 + 交换。在未排序序列中找到最小(大)元素,存放到未排序序列的起始位置。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。2、算法描述①. 从待排序序列中,找到关键字最小的元素;②. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;③. 从余下的 N – 1 个元素中,找出关键字最小的元素,...原创 2019-05-27 18:26:37 · 205 阅读 · 0 评论 -
基础算法:直接插入排序
插入排序:它的算法思想是:把要排序的数组分为了两个部分, 一部分是经过插入排序后有序的部分, 另一部分是除去第一部分待插入的元素; 先将第一部分排序完成, 然后再插入这个元素.。插入排序由于操作不尽相同, 可分为直接插入排序,折半插入排序(又称二分插入排序),链表插入排序,希尔排序。我们先来看下直接插入排序。1、基本思想直接插入排序的基本思想是:将数组中的所有元素依次...原创 2019-05-27 18:20:30 · 283 阅读 · 0 评论 -
如何理解算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等?
这里提供一点直观的视角:先从 O(1) 来说,理论上哈希表就是O(1)。因为哈希表是通过哈希函数来映射的,所以拿到一个关键字,用哈希函数转换一下,就可以直接从表中取出对应的值。和现存数据有多少毫无关系,故而每次执行该操作只需要恒定的时间(当然,实际操作中存在冲突和冲突解决的机制,不能保证每次取值的时间是完全一样的)。举个现实的例子,比如我的身后有一排柜子,里面有香蕉(代号B),苹果(代号A),...原创 2019-03-13 17:08:50 · 774 阅读 · 0 评论