
算法
Mu_Mu是一只小白
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
校验字符串中括号是否合法
/*核心思路:每次遍历字符串时,在栈中存放左括号,每次遇到右括号就利用栈的后进 先出 pop()一个最后进栈的元素,如果这时栈为空 或者这个左括号的类型和右括号类型不一样那么就不是合法括号。 */ public boolean isValid(String s) { if(s.length() % 2 !=0){ return false; } Map<Character, Character> map=new原创 2021-12-10 11:10:44 · 468 阅读 · 0 评论 -
数组小和问题
描述 在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。 例子 [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=16 思路: 可采用类似归并排序的拆分思路,将数组一直进行左右拆分直到数组的每个部分只有一个元素无法拆分,然后进行合并,合并时左右两个子序列都是相对有序的,所以只要找到(右边元素值大于左边的元素个数)*左边元素值就可原创 2021-11-10 11:25:28 · 900 阅读 · 0 评论 -
前端获取url参数的小算法
//获取查询页面穿透所携带参数 function getUrlParam(name){ var reg = new RegExp("(^|&)" + name + “=([^&]*)(&|$)”); //构造一个含有目标参数的正则表达式对象 var r = window.location.search.substr(1).match(reg); //匹配目标参数 if (r != null) { return unesc原创 2020-06-22 10:55:11 · 391 阅读 · 0 评论 -
java实现冒泡排序,直接插入排序,选择排序,希尔排序,以及求出它们的时间复杂度O(n)
package com.yg.sort;/* @author GeQiLin @date 2020/2/25 16:53 */ import java.util.Arrays; public class Sort1 { private static int max =80000; private static int arr[]; public static...原创 2020-02-26 11:35:57 · 254 阅读 · 0 评论 -
Floyd算法
Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。 Dijkstra算法是求一个出发节点到其他各节点的最短距离,而Floyd算法是求每个节点到其他个节点的最短距离 完整java代码: package com.yg.algorit...原创 2020-03-23 11:00:47 · 240 阅读 · 0 评论 -
迪杰斯特拉算法
迪杰斯特拉算法 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。 Java代码实现: package com.yg.algorithm;/...原创 2020-03-22 13:32:11 · 514 阅读 · 0 评论 -
Kruskal算法
Kruskal算法 Kruskal算法是一种用来查找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪心算法的应用。和Boruvka算法不同的地方是,Kruskal算法在图中存在相同权值的边时也有效。 基本思想 先构造一个只含 n 个顶点、而边集为空的子图,把子图中各个顶点看成各棵树上的根结点,之后,从网的边集...原创 2020-03-21 13:34:56 · 2786 阅读 · 0 评论 -
Prim算法解决修路问题
普里姆算法(Prim算法): 图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。 普里姆算法和贪心算法的区别 两者都是追求最优解,但是普里姆算法讲究全局优先,贪心算法讲究的是局部优先. 普里姆算法思路 1).输入:一个加权连通图,其中顶点集合为V,...原创 2020-03-20 10:26:50 · 1273 阅读 · 0 评论 -
贪心算法解决集合覆盖问题
问题描述: 假设存在下面需要付费的广播台,以及广播台需要覆盖的地区,如何选择最少的广播台,让所有的地区都可以接受到信号. 广播台 覆盖地区 k1 “北京”,“上海,“天津”” k2 “广州”,“北京,“深圳”” k3 “成都”,“上海,“杭州”” k4 “上海,“天津”” k5 “杭州”,“大连”" k6 “福州”,“重庆”" 贪心算法: 贪心算法(又称贪婪...原创 2020-03-19 12:19:32 · 1446 阅读 · 0 评论 -
暴力匹配算法和KMP算法
问题:如果有两个字符串str1,str2,我们要判断str2是否是str1的子字符串,我们可以采用暴力匹配算法,和KMP算法解决 1.暴力匹配算法 1.将两个字符串都变成字符数组; char []s1=str1.toCharArray(); char []s2=str2.toCharArray(); 2.判断s1[i]和s2[j]是否相等 (1.)不相等则i=i-...原创 2020-03-18 14:51:37 · 822 阅读 · 0 评论 -
动态规划算法解决01背包问题
01背包问题: 有一个背包它可以背n单位重量的物品,有几种物品它们的重量分别为1,2,3个单位,它们对应的权重分别为1500,2000,3000,求该背包怎样放物品才能使权重最大(一种物品只能放一次) 思路: 如下图用二维数组 v[i][j]代表i种物品在能负重j的背包里面的最大权重,且v[i][0]当背包负重为0时,背包权重为0,v[0][j]当物品个数为0时背包权重为0, 物品的重量 int...原创 2020-03-17 16:48:44 · 1768 阅读 · 0 评论 -
分治法求解汉诺塔问题
汉诺塔问题简介: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 A B C 思路: ...原创 2020-03-16 13:28:04 · 662 阅读 · 1 评论 -
数据结构与算法之图的深度优先遍历和广度优先遍历
图是表示一种多对多关系的数据结构 它包括无向图,有向图,带权图 无向图:就是顶点之间的连线(边)没有方向箭头 有向图:就是顶点之间的连线(边)有方向箭头 带权图:就是顶点之间的连线(边)表明了大小如上海到北京的距离,北京到天津的距离类似的导航地图就是带权图 下图就是一个无向图: 字母所表示的是顶点,顶点间的连线叫做边 按照A,B,C,D,E,F,G的顺序添加节点,并添加对应的边构成下图 深度优...原创 2020-03-15 15:53:37 · 4335 阅读 · 0 评论 -
队列,栈,链表的关系
想弄清楚这个问题首先得知道逻辑结构和存储结构(物理结构的区别) 逻辑结构: 逻辑结构分为四种类型:集合结构,线性结构,树形结构,图形结构。 主要表示数据元素之间的关系如一对一的线性结构,一对多的树形结构,多对多的图形结构 物理结构(存储结构): 物理结构又叫存储结构,分为四种种,顺序存储结构、链式存储结构、索引结构、散列结构。 主要表示数据在计算机中的存储方式是像数组一样的顺序存储,还是链表的链式...原创 2020-03-15 13:56:29 · 992 阅读 · 0 评论 -
数据结构与算法之平衡二叉树的构建和遍历
定义: 平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 产生原因: 如果待添加节点的值是有顺序的如{1,3,5,8,9,13}按照排序二叉树就会排列成如下图所示,这样它更像链表,添加效率高,遍历效率低,因为每次还...原创 2020-03-12 15:51:59 · 861 阅读 · 0 评论 -
数据结构与算法之二叉排序树的增加,删除,遍历
顺序二叉树:子树的左节点小于子树节点,子树的右节点大于子树节点,(和子树相同大小的节点可在左也可在右一般不提倡出现相同大小的节点) package com.yg.tree.binarySortTree;/* @author Mu_Mu @date 2020/3/11 9:50 */ public class BinarySortTreeDemo { public static ...原创 2020-03-11 14:19:56 · 227 阅读 · 0 评论 -
JAVA代码编写哈夫曼编码实现数据和文件的压缩和解压算法
package com.yg.tree.huffman;/* @author Mu_Mu @date 2020/3/8 10:16 */ import com.yg.tree.HuffmanTree; import java.util.*; public class HaffmanCode { //存放对应字符的Ascci码,和对应路径 private static...原创 2020-03-09 17:12:34 · 932 阅读 · 0 评论 -
数据结构与算法之构建哈夫曼树
哈夫曼树的介绍 Huffman Tree,中文名是哈夫曼树或霍夫曼树或者赫夫曼树,它是最优二叉树。 定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树。 (01) 路径和路径长度 定义:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L...原创 2020-03-07 11:25:13 · 2710 阅读 · 0 评论 -
查找算法之插值查找
package com.yg.search;/* @author Mu_Mu @date 2020/3/1 10:08 */ public class InsertValueSearch { public static void main(String[] args) { int arr[] = new int[100]; for (int i ...原创 2020-03-01 13:30:04 · 298 阅读 · 0 评论 -
查找算法之斐波那契查找
1、什么是斐波那契数列? 1、1、2、3、5、8、13、21、34…… 斐波那契数列又被成为黄金分割数列,因为 前一项/后一项越来越趋近于0.618 由上面的数列,可以发现 除了前两项,后面每一项都是前两项的和,如3+5=8、8+13=21… 由此可以得到一下等式 F(n)=F(n-1)+F(n-2) (除了前两项) 2、斐波那契查找和斐波那契数列有什么联系? 斐波那契查找原理与前两种相...原创 2020-03-01 13:29:13 · 897 阅读 · 3 评论 -
二分查找算法
package com.yg.search;/* @author Mu_Mu @date 2020/2/28 15:24 */ import java.util.ArrayList; import java.util.List; public class BinarySearch { public static void main(String[] args) { ...原创 2020-02-28 16:34:52 · 461 阅读 · 0 评论