数据结构和算法基础
巩固基础,砥砺前行 。
只有不断重复,才能做到超越自己。
能坚持把简单的事情做到极致,也是不容易的。
数据结构和算法
程序= 数据结构+算法
数据结构是算法的基础
问题1:字符串匹配问题。str1 是否完全包含 str2
1)暴力匹配
2)KMP算法
问题2:汉诺塔游戏
问题3:8皇后问题
问题4:骑士周游
问题5:写出单链表表示的字符串类以及字符串节点类的定义,并依次实现他的构造函数、以及计算字符串的长度、串赋值、判断两串相等、求子串、两串拼接、求子串在串中的位置等成员函数
问题6:使用二维数组保存棋盘上的数据,如何判断输赢?完成存盘退出和继续上局的功能
棋盘 二维数组->稀疏数组->写入文件
读取文件->稀疏数组->棋盘
问题7:约瑟夫问题(丢手帕),编号为 1,2,3,4……n的人围成一圈,约定编号为K(1<=K<=n)的人从1开始报数,数到m的那个人出列,然后从m的下一位又开始报数,数到m的那个人又出列,依次类推,直到所有人都出列为止,由此产生的一个出队的编号的序列
问题8:修路问题
问题9:最短路劲
稀疏数组和队列
将棋盘上的数据存储下来,可以使用二维数组来存储,没有棋子的可以使用默认的0,因此记录了很多没有意义的数据
–>优化:可以使用稀疏数组来存储
稀疏数组
记录数组有多少行 多少列;
把具体的有数据的行列以及数据记录下来,缩小程序的规模
棋盘数据存储和恢复:
使用稀疏数组来保留二维数组中有效的数据;
将稀疏数组存盘,同时将稀疏数组恢复为二维数组;
代码实现
package com.ttzz.a3;public class SparseArray {// 这是一个10*10的棋盘private static final int ROW_COL = 10;private static final int BLACK = 1;private static final int WHITE = 2;public static void main(String[] args) {int[][] aa = new int[ROW_COL][ROW_COL];
// System.out.println("棋盘:");
// printArray(aa);// 棋盘填充数据aa[3][4] = BLACK;aa[7][5] = BLACK;aa[3][2] = BLACK;aa[5][1] = BLACK;aa[6][6] = WHITE;aa[8][3] = WHITE;aa[1][1] = WHITE;aa[4][0] = WHITE;
// printArray(aa);int size = 0;// 有效数据for (int i = 0; i < ROW_COL; i++) {for (int j = 0; j < ROW_COL; j++) {if(aa[i][j]!=0) {size++;
// System.out.println(aa[i][j]);}}}
// System.out.println("size="+size);int bb[][] = new int[size+1][3];bb[0][0] = ROW_COL;bb[0][1] = ROW_COL;bb[0][2] = size;int count = 0;for (int i = 0; i < ROW_COL; i++) {for (int j = 0; j < ROW_COL; j++) {if(aa[i][j]!=0) {count++;
// System.out.println(count+","+i+","+j+","+aa[i][j]);bb[count][0] = i;bb[count][1] = j;bb[count][2] = aa[i][j];}}}
// printArray(bb);//将稀疏数组转为数组int cc[][] = new int[bb[0][0]][bb[0][1]];
// printArray(cc);for (int i = 1; i < bb.length; i++) {for (int j = 0; j < bb[i].length; j++) {System.out.println(i+","+j+","+bb[i][j]); cc[bb[i][0]][bb[i][1]] = bb[i][2];}}printArray(cc);}public static void printArray(int[][] item) {for (int i = 0; i < item.length; i++) {for (int j = 0; j < item[i].length; j++) {System.out.printf("%d\t", item[i][j]);}System.out.println();}}}
数据结构和算法-(排序算法-冒泡排序)
1.概念:什么是稳定排序和非稳定性排序?
相同元素排序中之后,顺序和之前的顺序一样,则为稳定排序,否则为非稳定性排序。道听途说,不足为惧。都是抄的,天下文章一大抄,先抄了再说。
2. 冒泡排序代码实现
2.1 普通版本
public static void sort1(int arr[]) {for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length-i-1; j++) {int item = 0;if(arr[j]>arr[j+1]) {item = arr[j];arr[j] = arr[j+1];arr[j+1] = item;}}}}
2.2 优化版本 某一步之后,后面的代码有序了,后面的代码就不排序了。
public static void sort2(int arr[]) {for (int i = 0; i < arr.length; i++) {boolean iscontinue = true; for (int j = 0; j < arr.length-i-1; j++) {int item = 0;if(arr[j]>arr[j+1]) {item = arr[j];arr[j] = arr[j+1];arr[j+1] = item;iscontinue = false;}}if(iscontinue) {break;}}}
2.3 优化版2
public static void sort3(int arr[]) {int sortborder = arr.length-1;//表示比较的边界int lastcomindex = 0; //最后一次比较的位置for (int i = 0; i < arr.length; i++) {boolean iscontinue = true; for (int j = 0; j < sortborder; j++) {int item = 0;if(arr[j]>arr[j+1]) {item = arr[j];arr[j] = arr[j+1];arr[j+1] = item;iscontinue = false;lastcomindex = j;}}sortborder = lastcomindex;if(iscontinue) {break;}}}
使用Java实现的栈
package aa.datastructure;import java.util.Arrays;/*** 栈*/
public class MyStack<E> {private Object[] data = null;private int length = 0; // 栈的容量private int top = -1; // 栈顶的指针MyStack() {}MyStack(int initSize){if(initSize>=0) {this.length = initSize;data = new Object[initSize];top = -1;}else {throw new RuntimeException("初始容量不能小于0"+initSize);}}public boolean push(E e) {if(top == length-1) {throw new RuntimeException("栈已经达到最大值");}else {data[++top] = e;return true;}}public E pop() {if(top == -1) {throw new RuntimeException("空栈");}else {return (E) data[top--];}}public E peek() {if(top == -1) {throw new RuntimeException("空栈");}else {return (E) data[top];}}public static void main(String[] args) {MyStack sm = new MyStack(3);for (int i = 0; i < 3; i++) {sm.push(i);}System.out.println(Arrays.toString(sm.data));for (int i = 0; i < 3; i++) {System.out.println(sm.peek());}for (int i = 0; i < 3; i++) {System.out.println(sm.pop());}}}
使用Java实现的队列
package aa.datastructure;import java.util.Arrays;/** 队列*/
public class MyQueue<E> {private int length;//容量private Object[] data;private int front;//头private int rear;MyQueue(){}MyQueue(int initSize){if(initSize>=0) {length = initSize;data = new Object[initSize];front = rear = 0;}else {throw new RuntimeException("队列初始化大小不能小于0");}}public boolean add(E e) {if(rear == length) {throw new RuntimeException("队列满了");}else {data[rear++] = e;return true;}}public E pool() {if(front == rear) {throw new RuntimeException("空队列");}else {E value = (E) data[front];data[front++] = null;return value;}}public E peek() {if(front == rear) {throw new RuntimeException("空队列");}else {E value = (E) data[front];return value;}}public static void main(String[] args) {MyQueue mq = new MyQueue(10);for (int i = 0; i < 5; i++) {mq.add(i);}System.out.println(Arrays.toString(mq.data));for(int i = 0; i < 5; i++) {System.out.println(mq.pool());}for(int i = 0; i < 5; i++) {System.out.println(mq.peek());}}}
【临渊羡鱼不如退而结网】
相关文章:
数据结构和算法基础
巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。 数据结构和算法 程序 数据结构算法 数据结构是算法的基础 问题1:字符串匹配问题。str1 是否完全包含 str2 1)暴…...
JS二维数组转化为对象
将二维数组转化为对象的形式 转之前的数据: 转之后: const entries new Map([[foo, bar],[baz, 42],[beginNode, 202212151048010054],[beginNode, 202212151048447710],]); console.log(entries)const obj Object.fromEntries(entries);console.lo…...
通过 EPOLL 解决客户端同时连接多服务器的问题
项目需求是 程序上 同时配置了多个服务端 设备 每隔一段时间需要 比如1分钟 连一下服务器看下是否连通 并将结果上报给平台 原来是用线程池来做的 具体大概就是 定时器到了之后 遍历设备列表 找到设备之后 通过 socket连接 发送一个指令 等待服务器返回 用来检查是…...
JavaScript数据结构【进阶】
注:最后有面试挑战,看看自己掌握了吗 文章目录 使用 splice() 添加元素使用 slice() 复制数组元素使用展开运算符复制数组使用展开运算符合并数组使用 indexOf() 检查元素是否存在使用 for 循环遍历数组中的全部元素创建复杂的多维数组将键值对添加到对象…...
jQuery编程学习3(jQuery 其他方法: jQuery 拷贝对象、 jQuery 多库共存、jQuery 插件)
目录 jQuery 其他方法 1. jQuery 拷贝对象 $.extend()方法 2. jQuery 多库共存 问题概述: 客观需求: jQuery 解决方案:(两种方式) 3. jQuery 插件 jQuery 插件常用的网站: jQuery 插件使用步骤&…...
jvm——垃圾回收机制(GC)详解
开始之前有几个GC的基本问题 什么是GC? GC 是 garbage collection 的缩写,意思是垃圾回收——把内存(特别是堆内存)中不再使用的空间释放掉;清理不再使用的对象。 为什么要GC? 堆内存是各个线程共享的空间…...
计算机组成原理-笔记-第七章
目录 七、第七章——输入输出系统 1、IO设备与IO控制方式 (1)控制方式(查询,中断,DMA) (2)通道控制 (3)IO系统 (4)总结 2、外设…...
【Linux】网络基础2
文章目录 网络基础21. 应用层1.1 协议1.2 HTTP 协议1.2.1 URL1.2.2 urlencode和urldecode1.2.3 HTTP协议格式1.2.4 HTTP的方法1.2.5 HTTP的状态码1.2.6 HTTP 常见的header1.2.7 最简单的HTTP服务器 2. 传输层2.1 端口号2.1.1 端口号范围划分2.1.2 认识知名端口号2.1.3 netstat2…...
可视化绘图技巧100篇进阶篇(四)-三维簇状柱形图(3D Clustered Bar Chart)
目录 前言 适用场景 图例 柱形图 一、柱形图的特点 二、柱形图的类型...
架构设计第八讲:架构 - 理解架构的模式2 (重点)
架构设计第八讲:架构 - 理解架构的模式2 (重点) 本文是架构设计第8讲:架构 - 理解架构的模式2,整理自朱晔的互联网架构实践心得, 他是结合了 微软给出的云架构的一些模式的基础上加入他自己的理解来总结互联网架构中具体的一些模式。我在此基…...
Java中的Maven Shade插件是什么?
Maven Shade插件是一个非常有用的Maven插件,它可以帮助你在构建项目时打包所有依赖项,并将其打包到一个单独的JAR文件中。这对于在构建过程中使用多个依赖项的项目非常有用,因为它可以让你避免在每个依赖项中都包含所有依赖项,从而…...
ffmpeg的bpp是什么?
例如: AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... AV_PIX_FMT_BGR24, …...
【C# 基础精讲】类和对象的概念
在面向对象编程(Object-Oriented Programming,OOP)中,类和对象是两个核心概念,用于描述和实现现实世界中的实体和关系。OOP 是一种编程范式,通过将数据和操作封装为对象来组织和管理代码,使得代…...
微信ipad实现批量添加联系人及批量分组
GEWE框架官方网站 geweapi.com 点击访问即可 搜索 小提示: 添加联系人必要接口搜索返回的V3 V4用于添加联系人 请求URL: http://域名地址/api/contacts/search 请求方式: POST 请求头: Content-Type:application/…...
Highcharts引入
Highcharts是和jQuery一起使用的,所以需要下载好jQuery jQuery下载方式:访问:http://cdn.staticfile.org/jquery/2.1.4/jquery.min.js,然后全选复制到自己新建的txt文档中,最后把扩展名改为js。 Highcharts下载方式&…...
腾讯云轻量和CVM有什么区别?不都是服务器吗?
腾讯云轻量服务器和云服务器有什么区别?为什么轻量应用服务器价格便宜?是因为轻量服务器CPU内存性能比云服务器CVM性能差吗?轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境,云服务器CV…...
Android高通8.1 Selinux问题
1、最近客户提了一个需求,说要在user版本上面切分辨率,默认屏幕分辨率是2.5 k 执行adb shell指令之后变成 4k 然后adb shell wm size可以查看 2、一开始我能想到就是在文件节点添加权限,这里不管是mtk还是qcom(高通平台ÿ…...
python图片爬虫
#!/usr/bin/env python # -*- coding:utf-8 -*- import argparse import os import re import sys import urllib import json import socket import urllib.request import urllib.parse import urllib.error # 设置超时 import timetimeout 5 socket.setdefaulttimeout(time…...
SpringBoot系列---【SpringBoot在多个profiles环境中自由切换】
SpringBoot在多个profiles环境中自由切换 1.在resource目录下新建dev,prod两个目录,并分别把dev环境的配置文件和prod环境的配置文件放到对应目录下,可以在配置文件中指定激活的配置文件,也可以默认不指定。 2.在pom.xml中最后位置…...
Transformer架构
Transformer架构是一种重要的神经网络模型架构,最初由Vaswani等人在2017年提出,并在机器翻译任务上取得了显著的性能提升。Transformer架构在自然语言处理领域得到广泛应用,特别是在语言模型、机器翻译和文本生成等任务中。 Transformer架构…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
