数据结构与算法回顾-图
图(Graph)「图 graph」是一种非线性数据结构,由「顶点 vertex」和「边 edge」组成。我们可以将图$G$抽象地表示为一组顶点$V$和一组边$E$的集合。
如果将顶点看作节点,将边看作连接各个节点的引用(指针),我们就可以将图看作一种从链表拓展而来的数据结构。
图的分类&术语
根据边是否具有方向,可分为「无向图 undirected graph」和「有向图 directed graph」
根据所有顶点是否连通,可分为「连通图 connected graph」和「非连通图 disconnected graph」
对于连通图,从某个顶点出发,可以到达其余任意顶点。
对于非连通图,从某个顶点出发,至少有一个顶点无法到达。
还可以为边添加“权重”变量,从而得到「有权图 weighted graph」
图数据结构包含以下常用术语。
「邻接 adjacency」:当两顶点之间存在边相连时,称这两顶点“邻接”。在图 9-4 中,顶点 1 的邻接顶点为顶点 2、3、5。
「路径 path」:从顶点 A 到顶点 B 经过的边构成的序列被称为从 A 到 B 的“路径”。在图 ...
数据结构与算法回顾-树
树(Tree)二叉树 - binary tree二叉树是一种非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节点引用。
在java中可以这么定义一个TreeNode
1234567/* 二叉树节点类 */class TreeNode { int val; // 节点值 TreeNode left; // 左子节点引用 TreeNode right; // 右子节点引用 TreeNode(int x) { val = x; }}
每个节点都有两个引用(指针),分别指向「左子节点 left-child node」和「右子节点 right-child node」,该节点被称为这两个子节点的「父节点 parent node」。当给定一个二叉树的节点时,我们将该节点的左子节点及其以下节点形成的树称为该节点的「左子树 left subtree」,同理可得「右子树 right subtree」。
二叉树术语这里 ...
数据结构与算法回顾-堆
堆(Heap)基本介绍堆是一种满足特定条件的==完全二叉树==,主要可分为两种类型:
小顶堆 min heap - 任意节点的值 ≤ 其子节点的值。
大顶堆 max heap - 任意节点的值 ≥ 其子节点的值。
堆有以下特性:
最底层节点靠左填充,其他层的节点都被填满
将二叉树的根节点称为“堆顶”,将底层最靠右的节点称为“堆底”
对于大顶堆(小顶堆),堆顶元素(根节点)的值是最大(最小)的
常用操作
这里以Java为例
1234567891011121314151617181920212223242526272829303132/* 初始化堆 */// 初始化小顶堆Queue<Integer> minHeap = new PriorityQueue<>();// 初始化大顶堆(使用 lambda 表达式修改 Comparator 即可)Queue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);/* 元素入堆 */maxHeap.offer(1);maxH ...
做做leetcode02
18 - 四数之和前情提要:三数之和
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):
0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。
例1:
12输入:nums = [1,0,-1,0,-2,2], target = 0输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
例2:
12输入:nums = [2,2,2,2,2], target = 8输出:[[2,2,2,2]]
思路:
思路和三数之和 一样,排序后,枚举nums[a]作为第一个数,枚举nums[b]作为第二个数,那么问题变成找到另外两个数,使得这四个数的和等于target,这可以用双指针解决。
对于nums[a]的枚举:
...
做做leetcode01
16 - 最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
例1:
123输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
例2:
12输入:nums = [0,0,0], target = 1输出:0
思路
采用双指针
my solution
123456789101112131415161718192021222324252627282930313233343536class Solution { public int threeSumClosest(int[] nums, int target) { int result = nums[0] + nums[1] + nums[2]; Arrays.sort(nums); for (int i = ...
DevOps期末复习
DevOps导论 - 开场白课程实践I 10%(暂定)
课程实践II 20%
课程实践III 20%
考试50% (暂定)
DevOps导论 - 第一讲 - 从凤凰项目谈起DevOps渊源定义:==DevOps -> Development Operations==
起源:是Patrick Debois在2009年提出的一种方法论——==能否像敏捷开发一样来做运维?==
作用:加强了开发,测试和运维之间的沟通协作, 打破了传统团队之间的壁垒,通过实现自动化和架构变更,从而提高研发效率,节省成本,最终更快捷地实现交付产品,并且提高产品质量。
软件工程发展趋势
演化发展史
改进措施
变更可视化
工具导入和过程落实的问题(看板)
解放资源约束
Brent的问题——保护、共享和容忍
安全审计
角色转变——共同目标
运维自动化/工具化
==三步工作法==第一步
概念
充分理解工作流(开发-运维-客户)
流量最大化(小批量、缩小任务间隔、缺陷控制)
不断为了整体目标的实现而优化工作流
部分关键实践与方法
持续构建、集成以及交付;
按需创建环境;
限制半成品(WIP);
...
嵌入式系统概论期末复习
嵌入式系统概论复习lecture 1 - 嵌入式系统概述嵌入式系统的定义
“嵌入式系统”实际上是“嵌入式计算机系统”的简称
==IEEE==(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置” (Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
该定义是从应用上考虑的,嵌入式系统是软件和硬件的综合体,还可以涵盖机电等附属装置
==国内普遍被认同的定义==:嵌入式系统是“以应用为中心,以计算机技术为基础,软硬件可裁减,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统”。
嵌入式系统就是一个具有特定功能或用途的隐藏在某种设备中的计算机软硬件集合体,没有固定的特征形状。
嵌入式系统三要素
嵌入性:嵌入到对象体系中,有对象环境要求
专用型:软、硬件按对象要求设计、裁减
计算机:实现对象的智能化功能
无处不在的嵌入式CPS信息物理系统,Cyber-Physical System (CP ...
MISE_hw4_体系结构作业
MISE_hw4_体系结构作业本文用以记载在完成MISE体系结构作业时遇到的一些踩坑和困难。
操作系统:macOS(m1芯片)
使用到的部分网址:
文档工程:
凤凰架构:https://icyfenix.cn
Vuepress 支持的文档工程:https://github.com/fenixsoft/awesome-fenix
前端工程:
Mock.js 支持的纯前端演示:https://bookstore.icyfenix.cn
Vue.js 2 实现前端工程:https://github.com/fenixsoft/fenix-bookstore-frontend
后端工程:
Spring Boot 实现单体架构:https://github.com/fenixsoft/monolithic_arch_springboot
https://nqq5jc94uf.feishu.cn/docx/FhujdzTCEouYiwxaxNfcZEF9nsb?from=from_copylink
Kubernetes 为基础设施的微服务架构:https://github.co ...
GO学习第二章
GO学习第二章数据类型
布尔型
布尔型的值只可以是常量 true 或者 false
1var b bool = true
数字类型
Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码
字符串类型
Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本
派生类型
指针类型(Pointer)
数组类型
结构化类型(struct)
Channel 类型
函数类型
切片类型
接口类型(interface)
Map 类型
变量Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是使用 var 关键字,格式为
1var identifier type
可以一次声明多个变量
1var identifier1, identifier2 type
变量声明
指定变量类型,如果没有初始化,则变量默认为零值
数值类型(包括complex64/128)为 0
布尔类型为 false
字符串为 “”(空字符串)
以下几种类型为 nil
123456var a *intvar a []i ...
GO学习第一章
GO学习第一章运行第一个go程序假设我们拥有一个名为hello.go的文件,我们该如何运行这段代码
终端
method 1
1$ go run hello.go
method 2
12$ go build hello.go$ ./hello
使用GoLand
在程序的左侧栏有一个绿色小三角,点击即可运行
最简单程序的结构
包声明
引入包
函数
变量
语句 & 表达式
注释
举例说明1234567891011package main //第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。import "fmt"//告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。func main() { //程序开始执行的函数 /* 这是我的第一个简单的程序 */ fmt.Pr ...