数据结构与算法
JustinNeil
年少是你未醒的梦话,风华是燃尽的彼岸花
展开
-
LeetCode-整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。...原创 2019-10-24 07:35:01 · 211 阅读 · 0 评论 -
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
题目描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 分析过程:求和居然不让用乘除法,也不准我们用循环,如果单独这两个限制的话还好,我们还可以用地递归,例如:public int f(int n){ if(n == 0){ return 0; }else{ return f(n -...原创 2019-08-18 05:45:58 · 439 阅读 · 1 评论 -
不用数学库求sqrt(2)
题已知 sqrt (2)约等于 1.414,要求不用数学库,求 sqrt (2)精确到小数点后 10 位。考察点1.基础算法的灵活应用能力2.退出条件设计java实现public class Sqrt { public static void main(String[] args) { System.out.println(sqrt2()); } ...原创 2019-08-17 19:56:04 · 894 阅读 · 0 评论 -
如何实现一个高效的单向链表逆序输出
下面是其中一种写法,也可以有不同的写法,比如递归等。供参考。 static class Node{ private int data; private Node next; Node(int d){ data = d; next = null; } publi...原创 2019-08-17 19:13:05 · 1187 阅读 · 0 评论 -
跳表
跳表 跳表是有序集合的底层实现之一。跳表是基于多指针有序链表实现的,可以看成多个有序链表。在查找时,从上层指针开始查找,找到对应的区间之后再到下一层去查找。下图演示了查找 22 的过程。 与红黑树等平衡树相比,跳跃表具有以下优点:插入速度非常快速,因为不需要进行旋转等操作来维护平衡性;更容易实现;支持无锁操作。...原创 2019-08-17 10:56:38 · 306 阅读 · 0 评论 -
贪心算法
贪心算法概念设计贪心算法的步骤案例剪绳子问题描述解决思路Java代码实现背包问题问题描述解决思路概念贪心算法指的是使每个操作看起来都是当前最佳的,期望通过多个局部最优解得到全局最优解。设计贪心算法的步骤1.将优化问题转换成这样一个问题,即先做出选择,再解决剩下的一个子问题2.证明原问题总是有一个最优解是贪心选择的得到的,从而说明贪心选择的安全3.说明在做出贪心选择后,剩下的子问题具有这...原创 2019-08-10 09:59:31 · 229 阅读 · 0 评论 -
布隆过滤器
布隆过滤器前言布隆过滤器原理布隆过滤器优缺点优点缺点使用场景前言Hash(散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。其作用是将一个大的数据集映射到一个小的数据集上面(这些小的数据集叫做哈希值,或者散列值)。一个应用是Hash Table(散列表,也叫哈希表),是根据哈希值 (Key value) 而直接进行访问的数据结构。也就是说,它通过把哈希值映射到表中一个位置...原创 2019-08-10 08:53:00 · 163 阅读 · 1 评论 -
BST原理剖析及Java实现
BST原理剖析及Java实现BST概念BST 实现原理BST 查找原理BST 插入原理BST 删除原理Java实现二叉查找树BST类测试BST 存在的问题BST概念二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点的值要比父节点的值大。它的高度决定了它的查找效率。在理想的情况下,二叉查找树增删查改的时间复杂度为O(logN)(...原创 2019-08-04 16:57:57 · 492 阅读 · 0 评论 -
二叉树
二叉树二叉树概念二叉树分类完全二叉树满二叉树平衡二叉树相关术语解释二叉树性质二叉树的遍历方式先序遍历中序遍历后序遍历层次遍历特殊的二叉树堆二叉查找树(BST)红黑树二叉树概念在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”。二叉树常被用于实现二叉查找树和二叉堆。二叉树分类完全二叉树若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) ...原创 2019-08-04 11:39:26 · 6008 阅读 · 0 评论 -
队列Queue
队列什么是队列?队列的种类单队列循环队列Java集合框架中的QueueQueue方法介绍add(E), offer(E)什么是队列?队列是数据结构中比较重要的一种类型,它支持先进先出(FIFO),尾部添加、头部删除,跟生活中的排队类似。队列的种类队列可以分为两种:单队列和循环队列单队列单队列就是最常见的队列, 每次添加元素时,都是添加到队尾以数组实现的队列为例,初始时队列长度固定为 ...原创 2019-08-04 11:09:31 · 275 阅读 · 0 评论 -
如何优雅的计算Fibonacci数列
前言程序员在面试的时候,算法是经常需要被考察,而算法问题中,又有这么一个登场率非常高的问题,叫做斐波那契数列。这个问题看似简单,其实里面有很多的门道,从最初级的程序员到算法高手,都能写出来答案。每个人都觉得自己写的对,但是很少人能写出最终完美的答案。这个题目之所以这么受面试官欢迎,主要是有三个特点,一是这个题目的答案简单,是个程序员都能写出来点什么;二是区分度高,不同水平的程序员能写出完全不同...原创 2019-07-20 20:28:14 · 916 阅读 · 0 评论 -
B+Tree
B+Tree定义B+树是B树的变体,也是一种多路搜索树:其定义基本与B树同,除了:1.非叶子结点的子树指针与关键字个数相同;2.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B树是开区间);3.为所有叶子结点增加一个链指针;4.所有关键字都在叶子结点出现;B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B树可以在非叶子结点命中),...原创 2019-07-30 09:40:42 · 137 阅读 · 0 评论 -
B-Tree
B-TreeB-Tree是一种平衡的多路查找(又称排序)树,在文件系统中和数据库系统中有所应用。主要用作文件的索引。其中的B就表示平衡(Balance) 。为了描述B-Tree,首先定义一条数据记录为一个二元组[key, data],key为记录的键值,对于不同数据记录,key是互不相同的;data为数据记录除key外的数据。那么B-Tree是满足下列条件的数据结构:d为大于1的一个正整数,...原创 2019-07-30 09:07:25 · 345 阅读 · 0 评论 -
死锁
死锁的概念及产生原理概念:多个并发进程因争夺系统资源而产生相互等待的现象。原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。本质原因:1)、系统资源有限。2)、进程推进顺序不合理。死锁产生的四个必要条件1.互斥条件:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。...原创 2019-05-12 15:25:29 · 334 阅读 · 0 评论