常用算法
常用算法
钦拆大仁
这个作者很懒,什么都没留下…
展开
-
三道算法题-字符串反转-最大的连续子数组-旋转数组取最小值
题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-words-in-a-string字符串反转给定一个字符串,逐个翻转字符串中的每个单词示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示.原创 2020-09-29 15:04:35 · 351 阅读 · 0 评论 -
两道算法题-打家劫舍-逆波兰表达式
打家劫舍一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例输入:[2,7,9,3,1]输出:12解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。 偷窃到的最高金额 = 2...原创 2020-08-05 16:51:58 · 176 阅读 · 0 评论 -
数据结构与算法(八)BTree B+Tree
简介B 树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树。(相对于二叉,B树每个内结点有多个分支,即多叉)B树又可以写成B-树B-Tree特性M阶BTree几个特性(m>=2)1、节点最多含有m个子树(指针),m-1个关键字2、除根节点和叶子节点外,其他每个结点至少有ceil(m/2)个子节点,ceil为向上取整3、若根节点不是叶子节点,则至少有两颗子树3阶B-treeP1 P2 P3为指针 17 15为关键字B-树的搜索从根结点开始,...原创 2020-05-27 11:42:18 · 455 阅读 · 0 评论 -
数据结构与算法(七)红黑树
平衡二叉树平衡二叉树的定义:它的左右树高度差不超过1为什么需要平衡二叉树?一种极端的情况:二叉搜索树的结点为1、2、3、4、5,如下图,这样的二叉树退化成链表,查找一个节点的时间复杂度是O(n)。为了避免这种情况,我们将它转化成平衡二叉排序树,二叉排序树的查找平均复杂度是O(log(n))我们该如何进行优化呢?因此有了平衡二叉树和红黑树。平衡二叉树定义左右树高度差不超过1,这样可以...原创 2019-09-24 15:34:59 · 182 阅读 · 0 评论 -
数据结构与算法(六)二叉树
简介二叉树是树的一种,数还包括红黑树、2-3-4树。为什么要用树呢?因为它结合了数组和链表两种数据结构的优点。众所周知,链表有查询慢插入删除快的特点,数组查询快删除添加慢。树结构能完美的解决这个问题。什么是树树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合。把它叫做“树”是因为它...原创 2019-09-08 15:16:11 · 215 阅读 · 0 评论 -
数据结构与算法(五)链表
简介链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但...原创 2019-09-06 17:14:18 · 156 阅读 · 0 评论 -
数据结构与算法(四)队列
简介队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队...原创 2019-08-30 16:31:21 · 183 阅读 · 0 评论 -
数据结构与算法(三)栈
简介栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。Java模拟实现简单的栈public class Sta...原创 2019-08-26 16:53:43 · 129 阅读 · 0 评论 -
数据结构与算法(二)数组
简介数组是应用最广泛的数据存储结构。它被植入到大部分编程语言中。由于数组十分易懂,所以它被作为介绍数据结构的起点。数组的特点:插入快、查找慢、删除慢、大小就固定。虽然数组插入快,但是查找和删除都比较慢,并且大小固定,这就意味着数组可拓展性很差。所有数组一般不单独使用,数组只会在复杂算法的基础上使用。增删改示例Arrays.javapublic class Array...原创 2019-08-20 16:25:23 · 127 阅读 · 0 评论 -
数据结构与算法(一)简介
数据结构的概述数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。数据结构的基本功能包括:查询、添加、删除、遍历。常用的数据结构包括:数据结构的优缺点如下:数据结构 优点 缺点 数组 插入块如果知道坐...原创 2019-08-19 16:30:23 · 161 阅读 · 0 评论 -
使用二分法计算开根号
public class SqrtCalculate { public static double recursion(double low, double high, double target) { double temp = (low + high) / 2; if (temp - low < 0.00000000001) { return temp; } ...原创 2019-07-26 16:39:45 · 2135 阅读 · 0 评论 -
经典排序算法
排序算法是《数据结构与算法》中最基本的算法之一排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:一、冒泡排序(Bubble Sort)1、比较相邻的元素。如...原创 2019-06-14 17:10:24 · 173 阅读 · 0 评论 -
Java常见算法思想
1、穷举算法思想在使用穷举法首先要明确问题的答案范围,然后在可能范围内列举出所有可能结果进行验证,最终得到符合条件的结果。算法实例:鸡兔同笼问题,鸡兔同笼。有100个头,300个脚,请问分别有多少鸡和兔。分析:鸡可能的范围是0-100只,我们就在0-100直接搜索结果。public static void main(String[] args) { int heads = 10...原创 2019-05-09 15:07:53 · 1327 阅读 · 0 评论 -
基本算法-分治算法
分治算法的基本思想当我们遇到要处理的数据相当多,或求解过程相当复杂的问题的时候。我们可以把它分解成若干的个子问题,若子问题还是很复杂,我们可以继续分解,直到解出问题为止。首先我们看去数组的最值的问题。取最值可以直接用比较法依次比较,但是如果遇到数据量比较大的情况比较下来速度会比较慢。我们可以 将数组分成两堆,分别取他们的最值,他们取到的最值进行比较,得到结果。public stati...原创 2019-03-13 09:38:28 · 321 阅读 · 0 评论 -
数组模拟队列操作
队列操作队列操作特点是先进先出,队列的删除只能操作头,插入只能操作尾。可以用一个数组存放数据,设计一个指针指向头一个指针指向尾,插入的时候调整尾指针,删除的时候移动头。同时增加了数组扩容和清除数组前面的多余空间。本例子中添加了泛型,适用于任何数据类型。栈操作也可以按进行添加。看过一个面试题将字符串倒序排列,这里就可以使用栈来实现。public class HeapArrays<...原创 2019-01-30 17:24:59 · 272 阅读 · 0 评论 -
数组模拟栈操作
栈操作栈操作特点是后进先出,栈的删除和插入只能操作栈顶数据。可以用一个数组存放数据,设计一个指针指向栈顶,插入删除的时候移动指针,取数据的时候直接取指针取数据就可以了。public class StackArrays { //数组存储数据 private int[] data; //栈的大小,默认10 private int maxSize = 10; //栈的头指针 p...原创 2019-01-30 11:12:25 · 356 阅读 · 0 评论