随笔分类 -  Data Algorithms

数据结构和算法
摘要:反转链表 import java.util.Arrays; import java.util.List; import org.springframework.util.CollectionUtils; import com.google.common.collect.Lists; import l 阅读全文
posted @ 2022-12-20 10:04 hongdada 阅读(180) 评论(0) 推荐(0) 编辑
摘要:求数组中不相邻的最大值 解决方案,假设opt数组为最优解,比如opt[6]就表示arr数组中下标0到6这段的最优解 即opt[n]=Math.max(opt[n-1],opt[n-2]+arr[n]) 上诉公式表示 不取下标为n的选项和取下标为n的选项两种方案的最大值 边界为 opt[0]=arr. 阅读全文
posted @ 2020-08-25 23:14 hongdada 阅读(458) 评论(0) 推荐(0) 编辑
摘要:简介 AVL树,是一种平衡(balanced)的二叉搜索树(binary search tree, 简称为BST)。由两位科学家在1962年发表的论文《An algorithm for the organization of information》当中提出,作者是发明者G.M. Adelson-V 阅读全文
posted @ 2020-01-08 14:51 hongdada 阅读(2015) 评论(0) 推荐(0) 编辑
摘要:模板图 二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉 阅读全文
posted @ 2020-01-08 11:27 hongdada 阅读(2988) 评论(0) 推荐(0) 编辑
摘要:预习: 先来复习一下中学的课程: 指数函数: y=ax函数(a为常数且以a>0,a≠1)叫做指数函数,函数的定义域是 R 对数函数: 如果ax=N(a>0,且a≠1),那么数x叫做以a为底N的对数,记作x=logaN,读作以a为底N的对数,其中a叫做对数的底数,N叫做真数。 一 阅读全文
posted @ 2019-12-12 18:17 hongdada 阅读(578) 评论(0) 推荐(0) 编辑
摘要:思路: 1.利用桶排序的思想,先求出原数组从最小值Min到最大值Max的单位区间长度d,d=(Max-Min)/n。算出d的作用是为了后续确定各个桶的区间范围划分。2.创建一个长度是N+1的数组Array,数组的每一个元素都是一个List,代表一个桶。3.遍历原数组,把原数组每一个元素插入到新数组A 阅读全文
posted @ 2018-01-27 18:06 hongdada 阅读(811) 评论(0) 推荐(0) 编辑
摘要:求一个带有获取最小值的方法的栈:(这个栈里面可以有重复的数据) 思路: 设置一个变量,比较每次push的值,使变量一直是最小的,但是这个有个问题,当最小值对应的数据被pop以后,并不知道第二小的值,当然如果最小值是入栈的第一个元素的话,就没有任何问题 下面的方法是, stack是用来存储数据的原有栈 阅读全文
posted @ 2018-01-26 14:40 hongdada 阅读(725) 评论(0) 推荐(0) 编辑
摘要:方法一:类似冒泡算法查找匹配,时间复杂度O(n^2) 方法二:hashset 方法三:这里主要讲的这个,比较新奇,时间复杂度O(n) 首先创建两个指针1和2(在java里就是两个对象引用),同时指向这个链表的头节点。然后开始一个大循环,在循环体中,让指针1每次向下移动一个节点,让指针2每次向下移动两 阅读全文
posted @ 2018-01-25 13:53 hongdada 阅读(537) 评论(0) 推荐(0) 编辑
摘要:区分B树,B-树 有的文章说二叉查找树(Binary Search Tree,BST)就是B树,这个我总结来说是不对的 B树和B-树是同一种树,只不过英语中B-tree被中国人翻译成了B-树,让人以为B树和B-树是两种树,实际上,两者就是同一种树。 前言: 动态查找树主要有:二叉查找树(Binary 阅读全文
posted @ 2018-01-12 16:29 hongdada 阅读(441) 评论(0) 推荐(0) 编辑
摘要:一、概述 本文将讲述Bit-Map算法的相关原理,Bit-Map算法的一些利用场景,例如BitMap解决海量数据寻找重复、判断个别元素是否在海量数据当中等问题.最后说说BitMap的特点已经在各个场景的使用性。二、Bit-Map算法先看看这样的一个场景:给一台普通PC,2G内存,要求处理一个包含40 阅读全文
posted @ 2018-01-11 10:05 hongdada 阅读(4391) 评论(2) 推荐(1) 编辑
摘要:红黑树又称红-黑二叉树,它首先是一颗二叉树,它具体二叉树所有的特性。同时红黑树更是一颗自平衡的排序二叉树。 我们知道一颗基本的二叉树他们都需要满足一个基本性质--即树中的任何节点的值大于它的左子节点,且小于它的右子节点。按照这个基本性质使得树的检索效率大大提高。我们知道在生成二叉树的过程是非常容易失 阅读全文
posted @ 2017-03-24 18:07 hongdada 阅读(285) 评论(0) 推荐(0) 编辑
摘要:jdk1.5 可以看出,如果在初始化ArrayList时进行赋值,那么开始是不会进行扩容的。 如果是一个未赋值初始值的ArrayList,不断对其进行add,那么可以看出再超过oldCapacity的时候,会生成新的newCapacity,值是(oldCapacity*3)/2+1。 可以非常明显的 阅读全文
posted @ 2017-03-24 16:56 hongdada 阅读(2160) 评论(0) 推荐(0) 编辑
摘要:二叉树的相关概念二叉树的定义二叉树(Binary Tree)是n(n>=0)个有限元素的集合,该集合或者为空,或者由一个称为根(root)的元素及两个不相交的,被称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树,在二叉树中,一个元素也称为一个结点。二叉树是有序的,即若将其左右子树颠 阅读全文
posted @ 2017-02-27 22:24 hongdada 阅读(1008) 评论(0) 推荐(0) 编辑
摘要:Java里面Stack有两种含义: 一:数据结构 Stack,即java.util.Stack Stack的特点为LIFO,即后进先出(Last in, first out)。 一般与之比较的是队列Queue,队列是两个口,先进先出。 二:内存区域 系统一般在内存中划分出两种不同的内存空间,一种是S 阅读全文
posted @ 2017-02-27 00:17 hongdada 阅读(2996) 评论(0) 推荐(0) 编辑
摘要:代码: 解决方法二:使用栈来模拟递归过程 https://my.oschina.net/Tsybius2014/blog/614514 http://www.cnblogs.com/wintersoft/p/4676124.html https://www.nowcoder.com/question 阅读全文
posted @ 2017-02-26 23:44 hongdada 阅读(384) 评论(0) 推荐(0) 编辑
摘要:二分查找又称折半查找,它是一种效率较高的查找方法。 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象, 如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种 阅读全文
posted @ 2017-01-12 17:13 hongdada 阅读(643) 评论(0) 推荐(0) 编辑
摘要:基数排序(Radix Sort)是在桶排序的基础上发展而来的,两种排序都是分配排序的高级实现。 分配排序(Distributive Sort)的基本思想:排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序。它们的时间复杂度可达到线性阶:O(n)。 基数排序代码: [7, 8, 9, 6 阅读全文
posted @ 2016-12-22 16:43 hongdada 阅读(274) 评论(0) 推荐(0) 编辑
摘要:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。 分治算法的一般步骤: (1 阅读全文
posted @ 2016-12-22 14:16 hongdada 阅读(218) 评论(0) 推荐(0) 编辑
摘要:插入排序分为直接插入排序和希尔排序 直接插入排序: 直接插入排序原理就是,假设前面n-1(n>=2)个元素已经排好序,现在要把第n个元素找到正确的位置并插入。 [7, 8, 9, 6, 1, 4, 3, 2, 5, 0, -1, -2, 10, -3] 第1轮排序结果:[7, 8, 9, 6, 1, 阅读全文
posted @ 2016-12-21 16:14 hongdada 阅读(220) 评论(0) 推荐(0) 编辑
摘要:选择排序有简单选择排序,堆排序 简单选择排序: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3] 第1轮排序结果:[-3, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, 9] 第2轮排序结果:[-3, -2, 7, 6, 5, 4, 3, 阅读全文
posted @ 2016-12-13 20:24 hongdada 阅读(235) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示