
算法
yjxyoung
这个作者很懒,什么都没留下…
展开
-
小和问题
用归并排序思想解决小和问题在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。例子:[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=16public class Test { public ...原创 2019-05-07 20:31:52 · 194 阅读 · 0 评论 -
只用2GB内存在20亿个整数中找到出现次数最多的数
题目:有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数要求:内存限制为2GB解决办法:通常做法是使用哈希表对出现的每一个数做词频统计,哈希表的key是某个整数,value记录整数出现的次数。本题的数据量是20亿,有可能一个数出现20亿次,则为了避免溢出,哈希表的key是32位(4B),value也是 32位(4B),那么一条哈希表的记录就需要占用8B。当哈希表记录数...原创 2019-06-20 11:21:19 · 547 阅读 · 0 评论 -
怎么计算一棵完全二叉树的节点个数
题目:已知一棵完全二叉树,求其节点的个数要求:时间复杂度低于O(N),N为这棵树的节点个数完全二叉树的概念就不多叙述了。讲讲思路:题目的要求是时间复杂度低于O(N),所以遍历的方式就不用考虑了,根据完全二叉树的特点可以知道,从头节点head开始一直往左走可以可以到达完全二叉树的最底层,而就是可以计算出二叉树的高度H了,(默认给定的一定是完全二叉树,,,)1)当头结点的右子节点作为头节点来计...转载 2019-06-14 16:17:06 · 863 阅读 · 0 评论 -
判断一棵树是否是平衡二叉树、二叉搜索树、完全二叉树
平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。public class IsBalance { public A isB(Node head){ if(head==null){ ...原创 2019-06-14 16:06:23 · 541 阅读 · 0 评论 -
在二叉树中找一个节点的后继节点
后继节点一共有两种情况:一种情况是当前节点有右子树,那么当前节点的后继节点一定在它的右子树上,即为右子树的最左边;另一种情况是当前节点(node)没有右子树,先看当前节点的父节点(parent)的左孩子是否是当前节点,若是则父节点是后继节点,若不是就向上寻找,另node=parent,parent=node.parent直到node是parent的左孩子。public class GetNe...原创 2019-06-14 15:47:20 · 324 阅读 · 0 评论 -
二叉树的先序、中序、后序遍历的递归及非递归版
1.前序遍历前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。若二叉树为空则结束返回,否则:(1)访问根结点;(2)前序遍历左子树;(3)前序遍历右子树 ;需要注意的是:遍历左右子树时仍然采用前序遍历方法。可以看出前序遍历后,遍历结果为:6312549782.中序遍历中序遍历首先遍历左子树,然后访问根结点,...原创 2019-06-14 15:36:46 · 649 阅读 · 0 评论 -
判断两个单链表的相交问题
判断两个单链表相交之前,我们应先判断单链表是否有环,然后就分成了有环链表的相交和无环链表的相交。第一步:判断单链表是否有环,有就返回第一个入环节点。我们首先要有个清晰的认知就是,如果一个单链表有环,那么遍历链表就永远在环里转下去。对此我们有两种方法判断第一种:利用hashset的特性,hashset的查询时间复杂度为O(1)。public Node isHuan(Node head){//判...原创 2019-06-08 21:34:26 · 153 阅读 · 0 评论 -
生成窗口最大值数组
题目:有一个整数型数组arr和一个大小为w的窗口从数组的最左滑到最右边,窗口每次向右边滑一个位置(时间复杂度O(n)),如果数组长度为n,窗口大小为w,则一共生产n-w+1个窗口的最大值。import org.junit.Test;import java.util.LinkedList;public class getMaxWindow { @Test public vo...原创 2019-06-01 20:21:20 · 192 阅读 · 0 评论 -
仅用递归函数和栈操作逆序一个栈
题目:一个栈依次压入1、2、3、4、5,那么栈顶到栈底分别为5、4、3、2、1。将这个栈逆序之后从栈顶到栈底分别为1、2、3、4、5。import org.junit.Test;import java.util.Stack;public class Reverse { @Test public void test(){ Stack<Integer&...原创 2019-06-01 19:05:54 · 130 阅读 · 0 评论 -
在行列都排好序的矩阵中找数
题目:给一个行列都排好序的矩阵,找到key的所在位置public static void main(String[] args) { int [][]arr={ {1,3,5,6}, {2,4,7,8}, {5,6,9,10}, {9,11,12,13}...原创 2019-05-25 21:19:04 · 115 阅读 · 0 评论 -
旋转矩阵
题目:给定一个矩阵,把这个矩阵调整成顺时针旋转90度例如:1 2 3 45 6 7 89 10 11 1213 14 15 16打印结果:13 9 5 114 10 6 215 11 7 316 12 8 4主要思想是:分圈处理 public void Test(){ int [][]arr={{1,2,3,10},{4,5,...原创 2019-05-25 21:10:39 · 733 阅读 · 0 评论 -
堆结构求中位数
/** * 堆结构实时求中位数 */public class Test02ByMedian { @Test public void test(){ int [] arr={9,75,6,4,3}; System.out.println(go(arr)); } public int go(int []arr){ ...原创 2019-05-19 12:43:47 · 485 阅读 · 0 评论 -
随机快排
/** * 随机快排 * @param arr * @param L * @param R */ public void sort2(int []arr,int L,int R){ if(L<R){ swap(arr,(int)(L+((R-L+1)*Math.random())),R);//...原创 2019-05-19 12:41:36 · 194 阅读 · 0 评论 -
逆序数对问题
逆序数就是左边序列比右边序列大的数对,现在要列出其中的逆序数对public class Test01byReversePair { A []a=new A[10]; int count=0; public static void main(String[] args) { Test01byReversePair t=new Test01byReverseP...原创 2019-05-07 20:43:07 · 566 阅读 · 0 评论 -
认识哈希函数
首先,先来介绍一下哈希函数的概念。哈希函数的输入域可以是非常大的范围,比如,一个字符串,但是它的输出域是固定的范围。并具有以下性质:典型的哈希函数都有无限的输入值域。当给哈希函数传入相同的输入值时,返回值一样。当给哈希函数传入不同的输入值时,返回值可能一样,也可能不一样,这是当然的,因为输出域是固定的范围,所以会有不同的输入值对应在输出域的一个元素上,这就涉及到了哈希碰撞的问题。最重要的...原创 2019-06-20 12:35:54 · 2936 阅读 · 0 评论