![](https://img-blog.csdnimg.cn/20200227170801841.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构与算法
Chill_Lyn_
进化成更好的人。
展开
-
算法_贪心_假设存在若干需要付费的广播台,已知广播台信号可以覆盖的地区,如何选择最少的广播台,让所有的地区都可以接收到信号
文章目录集合覆盖问题思路分析代码实现注意集合覆盖问题假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号思路分析遍历所有的广播电台, 找到一个覆盖了最多未覆盖的地区的电台将这个电台加入到一个集合中, 把该电台覆盖的地区在下次比较时去掉重复第1步直到覆盖了全部的地区代码实现public class GreedyAl...原创 2020-03-08 13:53:38 · 286 阅读 · 0 评论 -
算法_KMP_字符串子串出现个数
package cn.myAlgorithm;class SubstringCount { public static void main(String[] args) { String str = "abcabcabc"; String substr = "abc"; int count = 0; String temp; for (int i = 0; i <...原创 2019-08-06 20:59:11 · 1346 阅读 · 0 评论 -
算法_动态规划_回溯_0-1背包问题
import java.util.Arrays;/** * 0-1背包问题:算例 * 背包容量=10,5个可选物品 * 相应重量{2,4,6,5,2} * 相应价值{3,5,6,7,4} * 求背包最多可装多少价值物品 * 思路:动态规划 * 算法:v(i,j)=v(i-1,j) j<wi * v(i,j)=max{v(i-1,j),v(i-1,j-w...原创 2019-07-21 09:42:17 · 343 阅读 · 0 评论 -
算法_分治_汉诺塔(Hanoi Tower)
/** * 汉诺塔游戏规则: * 将n个由小到大堆放的盘子从A柱转移到B柱,借以C柱辅助 * 大盘子不可以放在小盘子上面 * * 实现思路:以三个盘子为例,最上面的小盘子编号为1,即1,2,3 * 最终实现的函数关系是h(3,A,B,C); //3个盘子从A移动到B,辅助C * 分解这个函数,把1,2两个小盘子当做一个整体 * 第一步,将1,2从A移到C h(2,A,C,B);...原创 2019-07-20 13:32:26 · 192 阅读 · 0 评论 -
数据结构_图以及深度优先遍历(DFS)和广度优先遍历(BFS)
文章目录图的常用概念图的表示方式邻接矩阵邻接表图的代码实现属性和构造器插入顶点插入边两点之间权值对应索引的节点边的总数邻接矩阵节点个数DFS与BFS辅助方法第一个邻接节点下一个邻接节点深度优先遍历(DFS)思想算法步骤代码实现广度优先遍历(BFS)思想算法步骤代码实现图的常用概念顶点边路径比如从 D -> C 的路径有:D->B->CD->A->B...原创 2020-03-07 16:47:43 · 1536 阅读 · 0 评论 -
数据结构_平衡二叉树(AVL)
文章目录介绍左旋转右旋转双旋转介绍平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。左旋转如果右子树高度-左子树高度>1,左...原创 2020-03-07 12:18:28 · 178 阅读 · 0 评论 -
数据结构_二叉排序树(BST)
文章目录介绍定义节点定义二叉树新增节点思路代码实现遍历删除思路删除叶子节点删除只有一颗子树的节点删除有两颗子树的节点代码实现查找节点查找父节点删除介绍BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。定义节点public class Node { int val; Nod...原创 2020-03-06 14:39:48 · 416 阅读 · 0 评论 -
数据结构_赫夫曼树
文章目录赫夫曼树基本介绍重要概念思路分析代码实现树的节点定义创建赫夫曼树赫夫曼树基本介绍给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。重要概念路径和路径长度:在一棵树中,从一个结点往下可以...原创 2020-03-06 11:32:16 · 209 阅读 · 0 评论 -
数据结构_线索化二叉树
n个结点的二叉链表中含有2n-(n-1)=n+1 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。public class ...原创 2020-03-04 22:01:35 · 286 阅读 · 0 评论 -
数据结构_顺序存储二叉树
文章目录基本说明特点代码实现基本说明从数据存储来看,数组存储方式和树的存储方式可以相互转换。特点只考虑完全二叉树第n个元素的左子节点为 2n + 1第n个元素的右子节点为 2n + 2第n个元素的父节点为 (n-1) / 2n表示树从顶层向下,从左往右依次编号,对应数组中的索引代码实现public class ArrayBinaryTree { private in...原创 2020-03-04 16:38:52 · 177 阅读 · 0 评论 -
数据结构_二叉树_前中后序遍历、查找、删除
文章目录树节点定义遍历查找删除树节点定义class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int val) { super(); this.val = val; } @Override public String toString() { return "TreeNod...原创 2020-03-04 15:09:38 · 181 阅读 · 0 评论 -
算法_查找算法(线性查找、二分查找、插值查找、斐波那契查找)
文章目录线性查找二分查找插值查找斐波那契查找线性查找/** * 线性查找所有结果 * @param arr * @param key * @return */private static List<Integer> seqSearchAll(int[] arr, int key) { List<Integer> idxs = new ArrayList&l...原创 2020-03-04 12:22:09 · 310 阅读 · 0 评论 -
算法_排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序、堆排序)
文章目录冒泡排序选择排序插入排序希尔排序快速排序归并排序基数排序常用排序算法总结和对比冒泡排序一共进行 arr.length-1次循环每轮中两两比较,前者比后者大交换,将最大值排到末尾,不参与下一轮排序如果发现在某轮排序中,没有发生一次交换, 可以提前结束冒泡排序/** * 冒泡排序 * @param arr */private static void BubbleSort(...原创 2020-03-03 20:11:51 · 370 阅读 · 0 评论 -
算法_递归_回溯_八皇后问题
文章目录问题描述思路代码实现定义属性辅助方法:打印结果辅助方法: 判断第n个皇后与之前是否冲突递归回溯TestResult问题描述八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。思路第1个皇后先放第1行...原创 2020-03-03 00:04:38 · 170 阅读 · 0 评论 -
算法_递归_回溯_迷宫问题
文章目录问题描述准备工作绘制迷宫打印迷宫走迷宫测试问题描述判断一个迷宫是否可以走通。注意:非求最优解,仅通过回溯判断是否有解准备工作绘制迷宫/** * 绘制地图 * @param maze */private static void paintMaze(int[][] maze) { //1表示墙 for (int i = 0; i < 10; i++) { ma...原创 2020-03-02 20:59:00 · 245 阅读 · 0 评论 -
数据结构与算法_链表_约瑟夫环_有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号
package cn.myAlgorithm;//有n个人围成一圈,顺序排号。//从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,//问最后留下的是原来第几号的那位class NumOff123 { public static void main(String[] args) { int n = 5;// 游戏人数 int dead=3;//淘汰数字 // 每...原创 2019-08-03 12:14:17 · 4350 阅读 · 0 评论 -
数据结构_双向链表
/** * 自定义一个链表 * add * get * remove * 泛型 * * @author Chill Lyn * */public class MyLinkedList<E> { private Node first; private Node last; private int size; // checkRange pri...原创 2019-07-22 22:30:43 · 115 阅读 · 0 评论 -
数据结构_单向链表
文章目录节点定义单向链表定义属性、构造器打印链表通过索引获取节点末尾添加指定索引添加有序添加指定索引删除指定内容删除修改查询应用打印单向链表查询节点个数查询倒数第k个节点反转有序合并节点定义public class ListNode { int val; ListNode next; public ListNode() { } public ListNode(int val) {...原创 2020-03-02 10:53:43 · 138 阅读 · 0 评论 -
数据结构_数组模拟队列
文章目录数组模拟单向队列数组模拟环形队列数组模拟单向队列// 使用数组模拟队列-编写一个ArrayQueue类class ArrayQueue { private int maxSize; // 表示数组的最大容量 private int front; // 队列头 private int rear; // 队列尾 private int[] arr; // 该数据用于存放数据, ...原创 2020-02-28 15:49:51 · 124 阅读 · 0 评论 -
数据结构_稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。package com.atguigu.sparsearray;public class SparseArray { public static void main(String[] args) { // 创建一个原始的二维数组 10 * 10 int originArr[][] = new in...原创 2020-02-28 10:32:11 · 137 阅读 · 0 评论