
算法
春天的早晨
https://github.com/Allenmcc
展开
-
字符串全排列
字符串全排列的一些感悟原创 2016-01-14 14:37:26 · 448 阅读 · 0 评论 -
布隆过滤器
文章目录什么是布隆过滤器场景实现原理HashMap 的问题布隆过滤器数据结构支持删除么如何选择哈希函数个数和布隆过滤器长度最佳实践实现什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构...转载 2019-03-10 22:22:58 · 222 阅读 · 0 评论 -
堆排序 (MEDIUM)
思路建堆:从第一个非叶子结点开始到第一个结点。出堆:每出一个,从根(0)开始调整。原理堆排序是一种树形选择排序方法,它的特点是:在排序的过程中,将array[0,…,n-1]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和孩子结点之间的内在关系,在当前无序区中选择关键字最大(最小)的元素。 1. 若array[0,…,n-1]表示一颗完全二叉树的顺序存储模式,则双亲节点指针和孩原创 2016-10-29 16:00:33 · 488 阅读 · 0 评论 -
先序中序得到后序 (MEDIUM)
思路ABDGCEFH DGBAECHF 输入前序ABDGCEFH,中序DGBAECHF,可以得出 A为该二叉树的根节点 1: BDG为该二叉树左子树的前序 2: DGB为该二叉树左子树的中序 A BDG CEFH DGB A ECHF 根据1和2可以构建一棵左子树 3: CEFH为该二叉树右子树的前序 4: ECHF为该二叉树右子树的中序 根据3和4可以构建一个右原创 2016-10-28 22:25:29 · 450 阅读 · 0 评论 -
Valid Parentheses (EASY)
题目Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.The brackets must close in the correct order, “()” and “()[]{}” are all valid but原创 2016-10-18 09:45:55 · 212 阅读 · 0 评论 -
Reverse Integer(EASY)
题目Reverse digits of an integer.Example1: x = 123, return 321 Example2: x = -123, return -321解答思考System.out.println(Integer.MAX_VALUE);//打印最大整数:2147483647 System.out.println(Integer.MIN_VALUE);//打印最小整原创 2016-10-17 20:54:54 · 268 阅读 · 0 评论 -
快速排序 (MEDIUM)
思路原理先从数列中取出一个数作为基准数。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步,直到各区间只有一个数。 挖坑填数+分治法实例以一个数组作为示例,取区间第一个数为基准数。 初始时,i = 0; j = 9; X = a[i] = 72由于已经将a[0]中的数保存到X中,可以理解成在数组a[0]上挖了个坑,可以将其它数据填充转载 2016-10-26 13:16:14 · 602 阅读 · 0 评论 -
Swap Nodes in Pairs (EASY)
题目Given a linked list, swap every two adjacent nodes and return its head.For example, Given 1->2->3->4, you should return the list as 2->1->4->3.思路源码public class SwapNodesInPairs { public static c原创 2016-10-26 11:33:19 · 266 阅读 · 0 评论 -
Merge Two Sorted Lists (EASY)
题目Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.思路推荐在前面初始化一个start工作指针。源码class ListNode { int val;转载 2016-10-23 18:09:45 · 256 阅读 · 0 评论 -
java 判断两个单链表是否相交
题目单链表可能有环,也可能无环。给定两个单链表的头节点 head1 和 head2, 这两个链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回 null 即可。思考链表分有环链表和无环链表,如果两个链表存在相交,则只有两种可能,两个链表都无环或者都有环。 1. 如果链表都无环,则先判断链表的尾指针是否一样,如果不一样,则没有相交。如果一样,则找出转载 2016-10-22 15:05:00 · 4225 阅读 · 5 评论 -
Java 实现单向链表
概念链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。 使用链表结构可以克服数组链转载 2016-10-22 14:54:01 · 458 阅读 · 0 评论 -
判断数组中包含重复数(大数中取重复)
判断数字是否出现在40亿个数中;找出一组数中不重复的数字,即只出现一次的数字;判断一个成员个数为n,成员取值在1 ~ n的数组中是否有重复的成员问题一给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?算法思路: unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内转载 2016-07-29 13:24:36 · 1888 阅读 · 0 评论 -
java Collections.sort排序原理
事实上Collections.sort方法底层就是调用的Arrays.sort方法,而Arrays.sort使用了两种排序方法,快速排序和优化的归并排序。快速排序主要是对那些基本类型数据(int,short,long等)排序, 而归并排序用于对Object类型进行排序。使用不同类型的排序算法主要是由于快速排序是不稳定的,而归并排序是稳定的。这里的稳定是指比较相等的数据在排序之后仍然按照排序之前...转载 2019-06-23 11:31:27 · 18410 阅读 · 0 评论