算法
Barry_2012
这个作者很懒,什么都没留下…
展开
-
JAVA单链表反转
(一)单链表的结点结构: data域:存储数据元素信息的域称为数据域; next域:存储直接后继位置的域称为指针域,它是存放结点的直接后继的地址(位置)的指针域(链域)。 data域+ next域:组成数据ai的存储映射,称为结点; 注意:①链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的。 ②每个转载 2017-08-09 12:45:31 · 317 阅读 · 0 评论 -
给40亿个无符号不重复且没排过序的数,查找一个数是否在这40亿个数之中
看到这样一道面试题,我们不由的想到前边学习过的哈希表,哈希表查找效率高,唯独就是 空间浪费有点大。而在这道题目之中,40亿个无符号数(表明最高位表示大小),几乎涵盖了整形里的所有的数(总共42亿9千多)。看到这样一道面试题,我们不由的想到前边学习过的哈希表,哈希表查找效率高,唯独就是 空间浪费有点大。而在这道题目之中,40亿个无符号数(表明最高位表示大小),几乎涵盖了整形里转载 2017-08-09 12:53:30 · 929 阅读 · 0 评论 -
找出数组前N大的数
这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序; 思路二:用最大堆的思想. 我暂时只实现了思路一,思路二我之后实现了会补上. 思路一比较简单了.我们先用快排的思想找出第n大转载 2017-08-10 22:21:46 · 3452 阅读 · 0 评论 -
java快速排序
快速排序(java实现)快速排序算法思想:基于分治的思想,是冒泡排序的改进型。首先在数组中选择一个基准点(该基准点的选取可能影响快速排序的效率,后面讲解选取的方法),然后分别从数组的两端扫描数组,设两个指示标志(lo指向起始位置,hi指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换lo和hi位置的值,然后从前半部分开始扫秒,发现有元素大于基准点的值,就交换lo和h转载 2017-08-27 22:24:59 · 223 阅读 · 0 评论 -
java 寻找数组中第k大的值
在未排序的数组中查找第k大的数。这里不对k的值进行判断了,认为它是合法的。1.排序 public static int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length - k]; }12341234时间复杂度为O(nlog(转载 2017-08-27 22:27:08 · 1350 阅读 · 0 评论 -
归并排序-java
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合转载 2017-08-30 15:08:03 · 319 阅读 · 0 评论 -
缓存淘汰算法--LRU算法
1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到转载 2017-10-08 13:14:19 · 351 阅读 · 0 评论 -
中缀表达式求值问题
中缀表达式的求值问题是一个比较常见的问题之一,我们通常在编写程序时,直接写出表达式让编译器去处理,很少去关心编译器是怎么对表达式进行求值的,今天我们来一起了解一下其中具体的原理和过程。 表达式一般来说有三种:前缀表达式、中缀表达式、后缀表达式,其中后缀表达式又叫做逆波兰表达式。中缀表达式是最符合人们思维方式的一种表达式,顾名思义,就是操作符在操作数的中间。而前缀表达式和后缀表达式中操作符转载 2017-10-25 09:24:35 · 1596 阅读 · 0 评论