数据结构 算法
数据结构 算法
Take^that
可控的事情要谨慎,不可控的事情要乐观。
展开
-
逆向最大匹配算法(python实现)
python 逆向最大匹配算法转载 2022-09-15 19:06:55 · 981 阅读 · 0 评论 -
递归实现目录树,菜单树
页面实现效果:Tree 树形控件1. 定义菜单类public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private String url; // 菜单图标 private String icon; // 菜单顺序 privat转载 2021-11-23 20:13:13 · 297 阅读 · 0 评论 -
java面试题
/* qn1: 下面代码会分别输出怎样的结果: public static void main(String[] args) { Map<String, Object> map = new HashMap<>(); String str = "没人比我更懂java"; StrObject obj = new StrObject("没人比我更懂java");原创 2021-04-24 11:42:44 · 173 阅读 · 0 评论 -
遍历集合元素,使用迭代器或forEach遍历,尽量避免使用for循环
测试代码:public static void main(String[] args) { List<String> arrayList = new ArrayList<String>(); List<String> linkedList = new LinkedList<String>(); f...转载 2019-10-03 17:45:17 · 707 阅读 · 0 评论 -
归并排序 java实现
参考资料:《算法》第四版一、核心思想:分治归并排序(Merge Sort):当我们要排序这样一个数组的时候,归并排序法首先将这个数组分成一半。如图:然后想办法把左边的数组给排序,右边的数组给排序,之后呢再将它们归并起来。当然了当我们对左边的数组和右边的素组进行排序的时候,再分别将左边的数组和右边的数组分成一半,然后对每一个部分先排序,再归并。如图:对于上面的每一个部分呢,我们依然...转载 2019-10-03 19:58:05 · 134 阅读 · 0 评论 -
约瑟夫(Josephus)杀人法 环形链表java实现
注释很详细,直接上代码:public class Josephus { public static int N=20; public static int M=5;//数到M就咔嚓一个人 //结点 class Node{ int val;//下标 Node next; public Node(int val){ this.val=val; } } pub...原创 2019-10-03 20:19:47 · 182 阅读 · 0 评论 -
二叉树的建立(通过前序遍历的数据序列反向生成二叉树);递归实现前序、中序、后序遍历;获取二叉树的节点数;求二叉树的深度
public class BinaryTree { private TreeNode root=null; //根节点; public BinaryTree(){ root=new TreeNode(1,"A"); //初始化下标为1的根节点 } /* * 构建二叉树 -->把子节点一个个的加上去 * A * B C * ...原创 2019-10-04 10:21:04 · 207 阅读 · 0 评论 -
创建查找二叉树
import java.util.Scanner;public class SearchBinaryTree { private TreeNode root; public SearchBinaryTree() { } /* * 创建查找二叉树 */ public TreeNode put(int data){ TreeNode node = null; ...原创 2019-10-04 10:37:22 · 149 阅读 · 0 评论 -
获取图顶点的入度、出度;获取图的两个顶点之间的权值; 图的深度优先算法、图的广度优先遍历
代码整理:public class Graph { private int vertexSize;//顶点数量 private int[] vertexs;//顶点数组 private int[][] matrix; //矩阵 private static final int MAX_WEIGHT=1000; // private boolean[] isVisited;...原创 2019-10-04 14:31:05 · 1197 阅读 · 1 评论 -
双栈实现 表达式求值
/* * 双栈算术表达式(未省略括号)求值算法 * 用两个栈(一个用于保存运算符,一个用于保存操作数) * 1.将操作数压入操作数栈; * 2.将运算符压入运算符栈; * 3.忽略左括号; * 4.在遇到右括号时,弹出一个运算符,弹出所需数量的操作数,并将运算符和操作数的运算结果压入操作数栈;*/public class Evaluate { public static voi...转载 2019-10-04 14:41:05 · 612 阅读 · 0 评论 -
递归实现迷宫问题 (java)
代码实现:public class MazeProblem { public static int Maze[][] ={//声明迷宫,外围不可走 0可走,1不可走 八个方位 {1,1,1,1,1,1,1}, {1,0,1,0,0,0,1}, {1,1,0,1,1,0,1}, {1,1,0,1,1,0,1}, {1,1,1,0,1,1,1}, {...原创 2019-10-04 15:42:56 · 318 阅读 · 0 评论 -
快速排序 java实现
1.快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。每次把数列分成两部分,究竟有什么好处呢?假如给定8个元素的数列,一般情况下冒泡排序需要比较8轮,每轮把一个元素移动到数列一端,时间复杂度是O(n^2)。2.而快速排序的流程是什么样子呢?如图所示,在分治法的思想下,原数列在每一轮被拆分成两部分,每一部分...转载 2019-09-22 17:43:42 · 94 阅读 · 0 评论 -
弗洛伊德算法 FLOD
int a[][] = { {0, 1000, 1000, 3, 5}, {10, 0, 18, 1000,1000}, {5, 1000, 0, 1000,1000}, {1000,1000,2, 0, 1000}, {1000,1000,2, 2, 0} };1.举个小栗子:由上面两张图可知:a[1][3...原创 2019-09-22 16:27:06 · 535 阅读 · 0 评论 -
新增商品时 生成商品编码
根据上图,若是再新增一个商品时 默认它的编码就是0033了,代码实现:public String genGoodsCode() throws Exception{ String maxGoodsCode=goodsService.getMaxGoodsCode();//当然,先获取最大编码 if(StringUtil.isNotEmpty(maxGoodsCode)) { Int...原创 2019-09-18 21:39:14 · 1701 阅读 · 0 评论 -
PriorityQueue
一、总体介绍优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数)。Java中PriorityQueue实现了Queue接口,不允许放入null元素;...转载 2019-08-06 17:34:39 · 112 阅读 · 0 评论 -
递归demo 数组求和
public class Sum { public static int sum(int[] arr){ return sum(arr, 0); } // 计算arr[l...n) 这个区间所有数字的和 private static int sum(int[] arr, int l){ if(l == arr.length){ ...原创 2019-08-07 14:28:20 · 83 阅读 · 0 评论 -
01背包问题 图解+详细解析 (转载)
原文链接:https://blog.csdn.net/qq_38410730/article/details/81667885(原文写的非常棒,算法核心思想都是一样的,用什么语言实现就不重要了)一、题目描述有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?为方便讲解和理解,下面讲述的例子均先用具体的数字代入,即:eg:number=4,cap...转载 2019-08-10 17:06:13 · 166440 阅读 · 48 评论 -
迪杰斯特拉(Dijkstra)算法
一、大致原理:Dijkstra提出按各顶点与源点v间的路径长度的递增次序,生成到各顶点的最短路径的算法。即先求出长度最短的一条最短路径,再参照它求出长度次短的一条最短路径,依次类推,直到从源点v 到其它各顶点的最短路径全部求出为止。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。具体实现原理参考链接(图解和讲解都非常清晰明了):https://www.j...转载 2019-08-14 22:37:46 · 288 阅读 · 0 评论 -
埃式筛选法 找N以内素数
一、题目:埃式筛选法:给定一个正整数n(n<=10^6),问n以内的素数二、大致思路做法:做法其实很简单,首先将2到n范围内的整数写下来,其中2是最小的素数。将表中所有的2的倍数划去,表中剩下的最小的数字就是3,他不能被更小的数整除,所以3是素数。再将表中所有的3的倍数划去……以此类推,如果表中剩余的最小的数是m,那么m就是素数。然后将表中所有m的倍数划去,像这样反复操作,就能依次枚举...转载 2019-08-11 10:44:05 · 293 阅读 · 0 评论 -
冒泡排序
一、冒泡排序法 口诀 /* 外层循环 0到n-1 //控制比较轮数 n 表示元素的个数 * 内层循环 0到n-i-1 //控制每一轮比较次数 两两比较做交换 */二、代码实现public class BubbleSort { public void bubbleSort(Integer[] arr, int n){ for(int...转载 2019-08-11 10:57:23 · 73 阅读 · 0 评论 -
分组 与 分治 求数组中的最大 、最下值
一、分组比较:分组比较代码实现:package b_class;import java.util.Random;public class FenzuTest { public static void main(String[] args) { int[] array = new int[11]; Random r = new Random(); for(i...转载 2019-09-08 21:53:37 · 656 阅读 · 1 评论 -
求数组中第二小的数
一、大致思路初始化2个最小值,firstmin,secondmin2.遍历所有元素,假如当前元素小于firstmin,那么将更新firstmin,secondmin.如果小于secondmin直接更新secondmin二、具体实现public class FindSecondMin { public static void main(String[] args) { int[] ...转载 2019-09-08 22:13:53 · 948 阅读 · 0 评论 -
GreedyPackage 贪心包 根据性价比排序
1.量度准则:性价比高的物体优先2.代码实现:import java.util.Arrays;public class GreedyPackage { private int MAX_WEIGHT=150;//包容量最大为150 private int[] weights=new int[]{35,30,60,50,40,10,25};//每件物品的重量 private int...转载 2019-09-13 22:01:30 · 195 阅读 · 0 评论 -
堆排序 Java实现
建立小顶堆:小根堆代码实现:public class HeapSort { public static void main(String[] args) { int[] a={12,3,6,8,5,19,20,16,4,2,7,13,8,11}; heapSort(a); } private static void heapSort(int[] a) {...原创 2019-09-14 17:39:53 · 130 阅读 · 0 评论 -
用数组实现栈 包括栈常用的操作
class Solution { public class Array<E> { private E[] data; private int size; //数组data中数据的个数 public Array( int capacity) { this.data = (E[])new Objec...原创 2019-08-03 09:12:23 · 140 阅读 · 0 评论