
算法和数据结构
苏察哈尔丶灿
我自横刀向天笑,笑完我就去睡觉。
展开
-
N皇后问题的思路整理
代码如下:package beginner.dynamic_programming;import utils.StopWatch;/** * @Auther: 苏察哈尔丶灿 * @Date: 2020/10/18 15:46 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。 */public class NQueen { /** * @param i 当前行 * @param record 索引为行号 值为列号 * @param n原创 2020-10-18 19:53:09 · 501 阅读 · 0 评论 -
并查集的合并流程
并查集的合并流程和对应判断操作只考虑引用类型,基本值类型暂未判断代码和思路如下:package beginner.set;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Stack;/** * 并查集 * * @Auther: 苏察哈尔丶灿 * @Date: 2020/9/29 14:45 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。 */pu原创 2020-09-29 15:42:25 · 475 阅读 · 0 评论 -
二叉树中两节点的最低公共祖先
二叉树中两节点的最低公共祖先要求如下:给定一个头节点head和另外两个节点 a b返回 a 和 b 的最低公共祖先代码和思路如下:package beginner.tree;/** * 给定一个头节点head * 和另外两个节点 a b * 返回 a 和 b 的最低公共祖先 * * @Auther: 苏察哈尔丶灿 * @Date: 2020/9/28 14:10 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。 */public class LowParentNo原创 2020-09-28 15:11:16 · 255 阅读 · 0 评论 -
最大的子搜索二叉树的大小 树型DP
最大的子搜索二叉树的大小 树型DP代码和注释原理如下:package beginner.tree;/** * 最大的子搜索二叉树的大小 * Dynamic Programming * * @Auther: 苏察哈尔丶灿 * @Date: 2020/9/27 16:25 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。 */public class MaxSubSBTSize { // 需要向子树寻求的信息 private class Info {原创 2020-09-27 17:20:03 · 214 阅读 · 0 评论 -
堆结构与比较器
数组与比较运算符实现大顶堆package beginner.tree;import java.util.Arrays;/** * @Auther: 苏察哈尔丶灿 * @Date: 2020/8/26 14:03 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。 */public class HeapTree { // 数据 private int[] dataArr; // 数组大小 private int limit; // 堆使用大原创 2020-08-26 15:56:42 · 195 阅读 · 0 评论 -
二叉搜索树、二叉查找树、二叉排序树
二叉搜索树、二叉查找树、二叉排序树基本的二叉树结构可点此查看二叉搜索树,又称二叉查找树、二叉排序树对于树结构中不合理的根节点选取,可能会导致此树形结构退化为链表结构,因此有更进一步的自平衡二叉树,如红黑树等,本文不做探讨。本示例二叉树结构如下图:树结构代码如下:package structure;// 节点类class Node { int data; Node left = null; Node right = null; public Node(int data)原创 2020-07-08 16:07:31 · 199 阅读 · 0 评论 -
基本的二叉树结构,前序、中序、后序遍历方式的差异
二叉树及遍历效果的实现本示例二叉树结构如下图:package structure;/* * 树节点对象 * * 为了缩减代码量 省略了get set方法 */class TreeNode { char data; TreeNode leftTreeNode; TreeNode rightTreeNode; public TreeNode(char data, TreeNode leftTreeNode, TreeNode rightTreeNode) { this.原创 2020-07-07 21:39:39 · 341 阅读 · 0 评论 -
背包问题的思路整理
背包问题的思路整理package algorithm;import java.util.Arrays;public class Backpack { public static void main(String[] args) { backpack(); } public static void backpack() { /* * 物品 1 2 3 4 * 价值 60 100 120 61 * 重量 1 2 3 1 */原创 2020-07-06 22:42:44 · 250 阅读 · 0 评论 -
快速排序的思路整理
快速排序的实现package algorithm;import java.util.Arrays;public class QuicklySort { public static void main(String[] args) { int[] arr1 = { 45, 28, 80, 90, 50, 16, 100, 10 }; // 快速排序详解 quicklySort(arr1, 0, arr1.length - 1); echoArr(arr1);原创 2020-07-04 21:03:35 · 152 阅读 · 0 评论 -
猴子吃桃问题的思路整理
猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个 ,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个,到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少个桃子?答案为:1534个。package algorithm;public class Monkey { public static void main(String[] args) { /* * 猴子吃桃问题: * *原创 2020-07-04 18:52:07 · 784 阅读 · 0 评论 -
冒泡排序的思路整理
冒泡排序的实现package algorithm;public class BubbleSort { public static void main(String[] args) { int[] arr1 = { 5, 8, 6, 3, 1, 9, 7, 4, 2 }; // 不知道是什么排序 sort(arr1); echoArr(arr1); int[] arr2 = { 5, 8, 6, 3, 1, 9, 7, 4, 2 }; // 冒泡排序原创 2020-07-03 14:17:56 · 251 阅读 · 0 评论 -
归并排序的思路整理
归并排序的实现package algorithm;public class MergeSort { public static void main(String[] args) { int[] arr = { 9, 8, 7, 0, 1, 3, 2, 5 }; // 插入排序 递归 + 分治 mergeSort(arr, 0, arr.length - 1);// 0 7 echoArr(arr, 0, arr.length - 1); } // 归并排序 publ原创 2020-07-03 10:26:52 · 178 阅读 · 0 评论 -
插入排序的思路整理
插入排序的实现package algorithm;public class InsertSort { public static void main(String[] args) { // 插入排序 insertSort(); } // 输出数组内容的方法 public static void echoArr(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]);原创 2020-07-03 09:08:31 · 214 阅读 · 0 评论 -
兔子数列递归算法实现的一些补充
兔子数列递归算法实现的一些补充本文整理了一些兔子数列更多递归算法的实现,如【缓存递归】,【尾递归】等。但是性能都受栈空间大小的限制,并不是最佳的实现算法兔子数列动态规划实现,请点此链接查看package algorithm;public class Fibonacci { public static int[] fibarr; public static void main(String[] args) { // 求兔子数列第45位 int n = 45; fibarr原创 2020-07-02 20:38:41 · 362 阅读 · 0 评论 -
兔子数列的不同实现方式
兔子数列的不同实现方式public class Demo { public static void main(String[] args) { // 求所有互不相邻的数的最大和【15 - 1, 4, 7, 3】 int arr[] = { 1, 2, 4, 1, 7, 8, 3 }; // 递归实现 重复子问题处理过多 System.out.println(rec_opt(arr, arr.length - 1));// 15 // 动态规划实现 System.out.pri原创 2020-06-20 12:26:56 · 459 阅读 · 0 评论 -
求解一个集合中是否能组成某个数-子集问题
求解一个集合中是否能组成某个数-子集问题public class SubSet { public static void main(String[] args) { // 求数组中能否组成9 子集问题 以下数中能否组成9 -只考虑正数集合 // 负数动态规划难以创建记录对应关系 正数下限为0 负数无下限 int arr1[] = { 3, 34, 4, 12, 5, 2 }; System.out.println("递归求解:" + recSubSet(arr1, 5, 9));原创 2020-06-22 01:48:09 · 310 阅读 · 0 评论 -
【^ 亦或运算符】 实现【变量值交换】和 【数组反转】
使用 【^ 亦或运算符】 实现【变量值交换】和 【数组反转】废话不多说,直接上代码,一切尽在注释中!!!废话不多说,直接上代码,一切尽在注释中!!!package demo;public class XOR { public static void main(String[] args) { // 使用亦或运算符 更换两个变量的值 changeNumber(1, 2);// 2, 1 // 定义一个数组 int[] arrOne = { 0, 1, 2,原创 2020-07-02 11:55:21 · 455 阅读 · 0 评论