数组结构与算法

文章目录

  • 数据结构与算法
    • 稀疏数组sparse
    • 队列
    • 单向链表
    • 双向链表
    • 单向环形列表:CircleSingleLinkedList
    • 递归
    • 排序算法
      • 快速排序思路
      • 赫夫曼树 (HuffmanTree)
      • 二叉排序树(Binary sort tree)
        • 构建二叉树
        • 遍历二叉树
      • 平衡二叉树(AVL树)
      • 多路查找树
  • 算法
    • 二分查找算法
    • 动态规划
    • KMP
    • 贪心算法
    • 普利姆算法
    • 克鲁斯卡尔算法
    • 迪杰斯特拉算法
    • 弗洛伊德算法
    • 马踏棋盘

数据结构与算法

稀疏数组sparse

  • 二维数据转稀疏数组(chessToSparse)
  • 稀疏数组转二维数组(sparseToChess)
  • IO存盘

队列

  • 使用数组模拟循环队列(ArrayCircleQueue)
    元素个数:rear + maxsize + front % maxsize
    判断队列是否为空:
  • 使用链表模拟队列

单向链表

  • 链表新增
  • 链表删除
  • 链表修改
  • 链表反转

双向链表

  • 链表新增
  • 链表删除
  • 链表修改

单向环形列表:CircleSingleLinkedList

  • 约瑟夫问题

  • 实现计算器计算【722-5+1-5+3-4=?】的结果
  • 前缀表达式
  • 中缀表达式
  • 后缀表达式
  • 中缀转后缀
    在这里插入图片描述

递归

  • 打印阶乘
  • 找出口:最优路径方法:列出所有策略的方法,找出最短路径
  • 八皇后问题

排序算法

在这里插入图片描述

快速排序思路

在这里插入图片描述

赫夫曼树 (HuffmanTree)

  • 数组构建赫夫曼树
  • 赫夫曼编解码

二叉排序树(Binary sort tree)

  • 构建二叉排序树
  • 中序遍历
  • 删除指定节点值
构建二叉树
遍历二叉树
package com.semanteme.demo.tree;import java.util.*;public class TreeBase {public static void main(String[] args) {Node root = new Node(7);Node node2 = new Node(5);root.setLeft(node2);Node node1 = new Node(11);root.setRight(node1);Node node3 = new Node(6);node2.setRight(node3);Node node4 = new Node(2);node2.setLeft(node4);Node node5 = new Node(3);node4.setRight(node5);Node node6 = new Node(1);node4.setLeft(node6);Node node7 = new Node(13);node1.setRight(node7);Node node8 = new Node(9);node1.setLeft(node8);Node node9 = new Node(14);node7.setRight(node9);Node node10 = new Node(12);node7.setLeft(node10);NodeUtil nodeUtil = new NodeUtil();nodeUtil.preOrder(root);System.out.println("====================");nodeUtil.inOrder(root);System.out.println("====================");nodeUtil.sufOrder(root);System.out.println("====================");List<Node> list = new ArrayList<>();list.add(root);nodeUtil.levelOrder(list);nodeUtil.levelOrderTraversal(root);}}class NodeUtil{/*** 前序遍历* @param node*/public void preOrder(Node node) {System.out.print(node.getValue() + " ");if(node.getLeft() != null){preOrder(node.getLeft());}if(node.getRight() != null){preOrder(node.getRight());}}/*** 中序遍历* @param node*/public void inOrder(Node node) {if(node.getLeft() != null){inOrder(node.getLeft());}System.out.print(node.getValue() + " ");if(node.getRight() != null){inOrder(node.getRight());}}/*** 后续遍历* @param node*/public void sufOrder(Node node){if(node.getLeft() != null){sufOrder(node.getLeft());}if(node.getRight() != null){sufOrder(node.getRight());}System.out.print(node.getValue() + " ");}/*** 层级遍历** @param list*/public void levelOrder(List<Node> list){ArrayList<Node> nextList = new ArrayList<>();for (Node node : list) {System.out.print(node.getValue() + " ");if(node.getLeft() != null){nextList.add(node.getLeft());}if(node.getRight() != null){nextList.add(node.getRight());}}System.out.println("====================");if(!nextList.isEmpty()){levelOrder(nextList);}}public void levelOrderTraversal(Node node){Queue<Node> queue = new LinkedList<>();queue.add(node);while (!queue.isEmpty()){Node poll = queue.poll();System.out.print(poll.getValue() + " ");if(poll.getLeft() != null){queue.add(poll.getLeft());}if(poll.getRight() != null){queue.add(poll.getRight());}}}
}class Node{private int value;private Node root;private Node left;private Node right;public Node() {}public Node(int value) {this.value = value;}public Node(int value, Node left, Node right) {this.value = value;this.left = left;this.right = right;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}public Node getLeft() {return left;}public void setLeft(Node left) {this.left = left;}public Node getRight() {return right;}public void setRight(Node right) {this.right = right;}public Node getRoot() {return root;}public void setRoot(Node root) {this.root = root;}@Overridepublic String toString() {return "Node{" +"value=" + value +'}';}
}

平衡二叉树(AVL树)

  • 左旋
  • 右旋

多路查找树

  • 图的表示
  • 深度优先遍历(DFS)
  • 广度优先遍历(BFS)

算法

二分查找算法

  • 递归写法
  • 非递归写法
  • 汉诺塔游戏算法

动态规划

  • 背包

KMP

贪心算法

普利姆算法

  • 修路最短

克鲁斯卡尔算法

迪杰斯特拉算法

弗洛伊德算法

在这里插入图片描述

马踏棋盘

在这里插入图片描述

package com.semanteme.demo.dst;import java.util.ArrayList;
import java.util.List;public class HorseChessBoard  {public static void main(String[] args) {int X = 8;int Y = 8;ChessBoard chessBoard = new ChessBoard(X, Y);System.out.println("周游前===========");chessBoard.show();long startTime = System.currentTimeMillis();chessBoard.travel(3, 2, 1);System.out.println("周游后===========;总共耗时:" + (System.currentTimeMillis() - startTime));chessBoard.show();}}class ChessBoard {private int X;private int Y;private int[][] chessBoard;private boolean[] visitChess;private boolean isFinished;public ChessBoard(int X, int Y){this.X = X;this.Y = Y;this.chessBoard = new int[X][Y];this.visitChess = new boolean[X * Y];}public void travel(int row, int col, int step){chessBoard[row][col] = step;visitChess[row * Y + col] = true;List<Coordinate> next = next(new Coordinate(row, col));sort(next);while (!next.isEmpty()){Coordinate remove = next.remove(0);// 未被访问过if(!visitChess[remove.getRow() * Y + remove.getCol()]){travel(remove.getRow(), remove.getCol(), step+1);}}if(step < X * Y && !isFinished){chessBoard[row][col] = 0;visitChess[row * Y + col] = false;}else {isFinished = true;}}private void sort(List<Coordinate> list){list.sort((o1, o2) -> {List<Coordinate> next1 = next(o1);List<Coordinate> next2 = next(o2);return next1.size() - next2.size();});}private List<Coordinate> next(Coordinate p){List<Coordinate> nextPoints = new ArrayList<>(8);// 添加0位置if(p.getRow() - 1 >= 0 && p.getCol() + 2 < Y){Coordinate point = new Coordinate(p.getRow() - 1, p.getCol() + 2);nextPoints.add(point);}// 添加1位置if(p.getRow() + 1 < X && p.getCol() + 2 < Y){Coordinate point = new Coordinate(p.getRow() + 1, p.getCol() + 2);nextPoints.add(point);}// 添加2位置if(p.getRow() + 2 < X && p.getCol() + 1 < Y){Coordinate point = new Coordinate(p.getRow() + 2, p.getCol() + 1);nextPoints.add(point);}// 添加3位置if(p.getRow() + 2 < X && p.getCol() - 1 >= 0){Coordinate point = new Coordinate(p.getRow() + 2, p.getCol() - 1);nextPoints.add(point);}// 添加4位置if(p.getRow() + 1 < X && p.getCol() - 2 >= 0){Coordinate point = new Coordinate(p.getRow() + 1, p.getCol() - 2);nextPoints.add(point);}// 添加5位置if(p.getRow() - 1 > 0 && p.getCol() - 2 >= 0){Coordinate point = new Coordinate(p.getRow() - 1, p.getCol() - 2);nextPoints.add(point);}// 添加6位置if(p.getRow() - 2 >= 0 && p.getCol() - 1 >= 0){Coordinate point = new Coordinate(p.getRow() - 2, p.getCol() - 1);nextPoints.add(point);}// 添加7位置if(p.getRow() - 2 >= 0 && p.getCol() + 1 < Y){Coordinate point = new Coordinate(p.getRow() - 2, p.getCol() + 1);nextPoints.add(point);}return nextPoints;}public void show() {for (int[] chess : chessBoard) {for (int i : chess) {System.out.print(i + " ");}System.out.println();}}
}/*** 坐标*/
class Coordinate{public int row;public int col;public Coordinate(int row, int col) {this.row = row;this.col = col;}public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getCol() {return col;}public void setCol(int col) {this.col = col;}@Overridepublic String toString() {return "Coordinate{" +"row=" + row +", col=" + col +'}';}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125135.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1300*B. Sort the Array(排序构造)

题意&#xff1a; 一个无重复数字的序列&#xff0c;能否反转一个区间使其成为单增序列。 解析&#xff1a; 记录每个点的值和初始下标&#xff0c;然后排序。 对于排好序的序列进行遍历&#xff0c;找出第一段和原序列下标不同的区间并且标记&#xff08;此区间即为翻转的区…

便携式脑卒中检测仪是不是离现实不远了?

摘要&#xff1a;本文介绍一个轻量级人工智能的应用--基于tinyML的便携式低成本脑部微波成像系统。参考资料为DOI&#xff1a; 10.1109/ISCAS46773.2023.10181746 医疗资源从来都是稀缺资源。 我们都经历过在医院CT和核磁共振室外排队的情况。即使您万分紧急&#xff0c;也只能…

计算机网络(六):应用层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络&#xff08;第7版&#xff09;-谢希仁 1. 应用层概述 应用层是计算机网络体系结构的最顶层&#xff0c;是设计和建立计算机网络的最终目的&#xff0c;也是计算机网络中发展最快的部分 早期基于文本的应用 (电子邮件、远程登…

逐步解决Could not find artifact com:ojdbc8:jar:12

Could not find artifact com:ojdbc8:jar:12 in central (https://repo.maven.apache.org/maven2) 原因&#xff1a; ojdbc8:jar:12 属于Oracle 数据库链接的一个程序集&#xff0c;缺失的话很有可能会影响数据库链接&#xff0c;蝴蝶效应产生不可预测的BUG&#xff01;但是版…

新手学习Python用哪个软件比较好?

对于新手学习Python&#xff0c;有几个常用的集成开发环境&#xff08;IDE&#xff09;可以选择。以下是一些受欢迎的选择&#xff0c;可供题主参考下载使用。 集成开发环境&#xff08;IDE&#xff09; 1. PyCharm&#xff1a; PyCharm 是一款功能强大的 Python IDE&#x…

【软件测试】软件测试的基础概念

一、一个优秀的测试人员需要具备的素质 技能方面&#xff1a; 优秀的测试用例设计能力&#xff1a;测试用例设计能力是指&#xff0c;无论对于什么类型的测试&#xff0c;都能够设计出高效的发现缺陷&#xff0c;保证产品质量的优秀测试用例。这就需要我们掌握设计测试用例的方…

(四)正点原子STM32MP135移植——u-boot移植

一、概述 u-boot概述就不概述了&#xff0c;u-boot、kernel、dtb三件套&#xff0c;dddd 经过国庆艰苦奋战&#xff0c;已经成功把所有功能移植好了 二、编译官方代码 进入u-boot的目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf u-boot-stm32mp-v2022.10-stm32mp-r1-r0.…

手动实现BERT

本文重点介绍了如何从零训练一个BERT模型的过程&#xff0c;包括整体上BERT模型架构、数据集如何做预处理、MASK替换策略、训练模型和保存、加载模型和测试等。 一.BERT架构   BERT设计初衷是作为一个通用的backbone&#xff0c;然后在下游接入各种任务&#xff0c;包括翻译…

反素数

198. 反素数 - AcWing题库 最大的反素数也就是约数个数最多的数中最小的那个数&#xff0c;可以考虑分解质因子形式 2、3、5、7、11、13、17、19、23、29这些&#xff0c;还有每个质因子的指数一定大于等于下一个质因子的指数&#xff0c;这样可以保证约数最多的时候数字尽可能…

力扣 -- 873. 最长的斐波那契子序列的长度

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int lenLongestFibSubseq(vector<int>& nums) {int nnums.size();unordered_map<int,int> hash;for(int i0;i<n;i){hash[nums[i]]i;}int ret2;vector<vector<int>> dp(n,v…

Java编程技巧:swagger2、knif4j集成SpringBoot或者SpringCloud项目

目录 1、springbootswagger2knif4j2、springbootswagger3knif4j3、springcloudswagger2knif4j 1、springbootswagger2knif4j 2、springbootswagger3knif4j 3、springcloudswagger2knif4j 注意点&#xff1a; Api注解&#xff1a;Controller类上的Api注解需要添加tags属性&a…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 2 - 改善深层神经网络 - 第二周测验

课程2_第2周_测验题 目录&#xff1a;目录 第一题 1.当输入从第8个mini-batch的第7个的例子的时候&#xff0c;你会用哪种符号表示第3层的激活&#xff1f; A. 【  】 a [ 3 ] { 8 } ( 7 ) a^{[3]\{8\}(7)} a[3]{8}(7) B. 【  】 a [ 8 ] { 7 } ( 3 ) a^{[8]\{7\}(3)} a…