
通用算法
文章平均质量分 94
Royal_lr
本人热爱编程,有着很强的兴趣,做事认真
展开
-
如何生成指定范围内的随机数,要求稳定的时间复杂度?
解决循环生成重复随机数的问题原创 2020-08-25 14:36:25 · 9422 阅读 · 3 评论 -
快速排序进阶:解决经典面试topK问题
不玩虚的,硬核干货快排解决topK,你值得拥有原创 2020-04-07 15:40:52 · 9713 阅读 · 5 评论 -
快速排序计算第K大的数
熟悉快排的同学都知道,若不熟悉的同学,可以先看我的这篇白话解析快速排序。快排使用某一个数作为基准点进行分区,通常基准点左边的数都是小于基准点的,在基准点右边的数都是大于基准点的。 例如1,3,4,2这组数字,使用快排以2为基准点进行倒序排序第一次的结果为3,4,2,1 ,如果你恰好是求第3大的数,那么就是基准点2,只用了一次排序,时间复杂度为O(n)。如果你是求第...原创 2020-03-26 10:58:34 · 9046 阅读 · 10 评论 -
白话解析快速排序
快速排序算法简称快排,就是在数组中选择任意一个元素作为临界值,然后遍历数组中的元素将小于临界值的放到左边,大于临界值的放到右边,这样就完成了一次排序,最后通过递归依次将临界值左右部分的元素进行排序即可。现在我们来思考下如何实现这样一种排序方式,若不考虑空间复杂度,我们最容易想到的一种方式是新建2个临时数组分别存放左右两部分排序的数据,比如临界值为4,我们将小于4的放到一个数组,大于4的放到另一...原创 2019-11-20 16:38:51 · 7945 阅读 · 5 评论 -
白话解析归并排序
简单来说,归并排序主要是将多个有序的序列合并为一个有序的序列. 我们首先看下2个简单的数 5 , 2,那么直接将5和2比较交换位置就变成 2,5。然后再加2个数 4,3,同理,比较交换变成3,4 。 现在我们将2,5和3,4 这2个序列合并为一个有序序列, 对于没有什么算法基础的同学第一个想到可能是先找出最小的数,然后是第二小的数,第三小的数等等,最后依...原创 2019-11-14 16:28:04 · 7781 阅读 · 5 评论 -
白话解析冒泡排序优化
冒泡排序就是每2个相邻的数据进行比较后,按照升降序进行交换,每次排序至少会让一个最大或最小的元素(默认从左至右排序,升序为最大元素,降序为最小元素)移动至队尾,重复N次后,完成此次排序。 假设我们用2,5,1,3,4,6这个整型数组进行排序。 我们首先看下优化前的冒泡排序: public static int[] bubbleSort(in...原创 2019-11-01 16:58:26 · 7833 阅读 · 5 评论 -
高效的十进制与18进制的转换
十进制与18进制数的转换原创 2016-08-11 19:30:18 · 12542 阅读 · 1 评论 -
java 栈 stack的应用场景
栈的特性: 先进后出1. 单链表,求倒数第K个数public class MyNode { public Integer value; public MyNode next; public MyNode(Integer value) { this.value = value; } @Override public Stri...原创 2019-03-25 17:23:46 · 9600 阅读 · 0 评论