- 博客(55)
- 收藏
- 关注
原创 【Linux 网络编程】生动讲解 Reactor 模式与 Proactor 模式
五种 I/O 模型先花费点时间了解这几种 I/O 模型,有助于后面的理解。阻塞 I/O 与非阻塞 I/O阻塞和非阻塞的概念能应用于所有的文件描述符,而不仅仅是 socket。我们称阻塞的文件描述符为阻塞 I/O,称非阻塞的文件描述符为非阻塞 I/O。socket 在创建的时候默认是阻塞的,我们可以给 socket 系统调用的第 2 个参数传递 SOCK_NONBLOCK 标志,或者通过 fcntl 系统调用的 F_SETFL 命令将其设置为非阻塞的。针对阻塞 I/O 执行的系统调用可能因为无法
2022-05-04 22:35:07
536
原创 【位运算】剑指offer 56. 数组中数字出现的次数
【位运算】剑指offer 56. 数组中数字出现的次数这是一系列位运算的题目,先从最简单的问题开始,循序渐进,逐渐深入:问题1:一个数组中只有一个数字出现过1次,其余数字都出现过两次,请找到那个只出现1次的数字。要求时间复杂度是 O(n)O(n)O(n),空间复杂度是 O(1)O(1)O(1)。解法:考虑到位运算中的异或运算,一个数字和它自己做异或,结果为0。所以只需要遍历整个数组,挨个异或,出现两次的数字会被抵消为0,最后得到的结果就是那个只出现1次的数字。class Solution {
2022-04-12 11:08:16
1191
1
原创 【优先队列 堆】剑指 Offer 41. 数据流中的中位数
剑指 Offer 41. 数据流中的中位数将数据分为两半,较小的一半用大顶堆存放,较大的一半用小顶堆存放。当前数据总数为 cntcntcnt ,这样当一个新的数据 numnumnum 进来时,考虑下面两种情况:cnt % 2==0cnt\ \%\ 2 == 0cnt % 2==0 :先将 numnumnum 压入小顶堆,然后将小顶堆堆顶元素压入大顶堆,最后 poppoppop 掉小顶堆堆顶元素;这种情况时,两个堆内的元素数量相同,那么加入新元素后,前半段
2022-04-09 14:51:29
287
原创 Leetcode 5. 最长回文子串--动态规划与中心扩展
5. 最长回文子串题目描述给你一个字符串 sss ,找到 sss 中的最长回文子串。示例:输入:s = "babad"输出:"bab"解释:"aba"同样是符合题意的答案。解答动态规划回文串天生自带状态转移的属性,对于一个回文串来说,去掉两头的字符,剩余部分必定也是一个回文串;同样的,如果一个字符串两端的字符不相等,那么这个字符串必定不是一个回文串。因此考虑动态规划。令 dp[i][j]dp[i][j]dp[i][j] 表示字符串 s[i:j]s[i:j]s[i:j] 是否是一
2022-03-19 21:29:26
873
原创 剑指Offer II.079. 080. 081.082.回溯专题(一)
算法之于程序员,就像武装色霸气之于海贼。修炼强大的武装色霸气,才能保护我想保护,成就我想成就。
2022-02-21 23:25:15
291
原创 剑指offer II 077、078 归并排序(有待加强)
剑指 Offer II 077. 链表排序题目描述思路:题目进阶要求 O(nlogn)O(nlogn)O(nlogn) 的时间复杂度,那么这里正好复习一下排序算法的时间复杂度:O(n2)O(n^2)O(n2) 级别:选择排序、插入排序、冒泡排序;O(nlogn)O(nlogn)O(nlogn) 级别:堆排序、快速排序、归并排序;因此考虑堆排序、快速排序、归并排序中的一个。其中堆排序和快速排序都需要元素的随机访问,对于链表来说不合适。只能考虑归并排序。方法一:最简单想到的归并排序就是自顶
2022-02-17 17:06:49
536
2
原创 剑指 Offer II 076. 数组中的第 k 大的数字 (用堆来解决topK问题)
剑指 Offer II 076. 数组中的第 k 大的数字 (用堆来解决topK问题)题目描述解题思路这道题是一个很基础也很经典的 topK 问题。借此机会,顺便整理一下堆排序的写法。首先是调整堆的结构以及建堆的代码,以大顶堆为例://调整堆的结构使其满足根节点大于等于其孩子节点void maxHeapify(vector<int>& a, int i, int heapSize) { int left = i * 2 + 1, right = i * 2 + 2;
2022-02-16 00:42:51
293
原创 剑指 Offer II 075. 数组相对排序(自定义排序、计数排序)
剑指 Offer II 075. 数组相对排序(自定义排序、计数排序)题目描述方法一:最简单最容易想到的方法用一个map<int, int> mp记录arr1中的每个数字出现的次数遍历arr2的同时,向答案数组ans中循环添加arr2[i],循环次数为arr1中出现的次数,同时用一个变量cnt记录所有出现的次数总和。即mp[arr2[i]],遍历结束时arr1中出现在arr2中的数字就有序了用一个set<int> st存储arr2中的数字,遍历arr1,如果不曾出现在s
2022-02-15 15:37:06
539
原创 剑指 Offer II 074. 合并区间(排序,数组)
题目描述一道简单的合并区间问题。题目传送门解题思路两个区间如果能合并,一定是有交集,也就是第二个区间的头在第一个区间内,这样就想到了先对所有区间进行排序,然后用一个数组tmp[]记录当前区间的起始点。初始时起始点设为第一个区间intervals[0]的起始点,然后遍历所有区间:如果当前区间intervals[i]的起点在tmp[0]和tmp[1]之间,也就是与当前记录的合并区间tmp有交集,那么就合并两个区间,把tmp[1]的值修改为max(tmp[1], intervals[i][1])(这里
2022-02-15 13:43:12
233
原创 Transformer的架构理解
前言本文是结合了B站李沐论文精读系列课程的内容和Transformer论文的内容,再加上自己的整理。本文主要涉及到Transformer网络结构的LayerNorm、Attention、Embedding、Positional Encoding部分。感谢李沐大神的视频课帮我对Transformer架构有了更深入的了解。LayerNorm & BatchNormBatchNormBatchNorm是对每一个特征做Normalization。以最简单的二维输入矩阵为例,矩阵的行为batch
2022-02-14 23:33:09
1315
原创 使用typora+picGo实现markdown文档图片自动上传
使用typora+picGo实现markdown文档图片自动上传Introduction经常写博客的小伙伴经常会遇到这样的烦恼:在本地用typora写的笔记、博客,上传到博客网站时往往由于图片地址为本地路径导致网站上博客图片加载不出来。本文的方法就解决了这个问题,亲测好用。本方法适用gitee仓库作为图床,存储图片。选择gitee而不是Github是考虑到国内访问GitHub经常被墙,避免以后图片加载出现问题。Tutorialstep1.首先要注册一个gitee账号,然后点击右上角的加号,新建一
2022-02-14 12:33:33
472
原创 第280场周赛Problem2:使数组变成交替数组的最少操作数
题目描述使数组变成交替数组的最少操作数思路最少的调整操作,意味着我们分别把奇(偶)数下标位的数字调整为所有奇(偶)数下标位数字中出现次数最多的数字,这样的调整次数会最少。同时又不能让奇偶下标位的数字是相同的。比赛的时候想到了这个思路,但是在做的过程中感觉越做越麻烦,对自己的思路也越来越不清晰,越来越不自信,导致没有做出来。希望吸取教训,在做题的过程中树立道路自信、理论自信(咳咳…过程:用两个哈希表mp_0和mp_1分别记录奇偶位置上每个数字的出现次数;把两个哈希表中的键值对按值排序,分别得
2022-02-14 11:41:07
587
原创 MacOS下python安装zbar
安装zbar一直失败,提示error: command 'gcc' failed with exit status 1, ERROR: Failed building wheel for zbar。解决方案使用homebrew安装zbarbrew install zbar完美解决
2021-11-17 16:44:12
1178
原创 Leetcode47.全排列II
题目描述:给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。思路排列的问题就用回溯。由于nums数组中可能有相同的数字,所以在全排列时会出现重复的排列。这就需要剪枝。思路如下:首先将nums数组进行排序,让相同的数字紧邻;然后在递归填入数字的过程中每次都需要遍历vis数组来查找未被使用过的数字,这样我们只寻找未被使用的数字中的第一个,例如nums = [1, 1, 2],当第一个1开头的所有排列情况都被找到后,开始寻找第二个1开头的排列,这时的vis = [0, 0,
2021-10-28 15:59:44
125
原创 Cesium学习笔记(七)CesiumJS和Webpack
CesiumJS和Webpack优化一个CesiumJS webpack应用程序的完整代码和提示可以在官方实例库网站中找到:https://github.com/CesiumGS/cesium-webpack-example创建一个基础webpack应用程序使用npm初始化应用程序为你的app创建一个新的cesium-webpack-app目录。打开控制台,进入这个新的目录,执行npm init,然后一路enter使用默认设置,最后会在目录里创建一个package.json文件。创建app代码创
2021-01-07 15:44:03
397
1
原创 docker中安装的oracle扩容表空间
我在用jdbc连接docker里的oracle并往oracle数据库中插入几百万条数据后报错ORA-01653:表xxx无法通过8(在表空间SYSTEM)扩展,是因为表空间system已经用完,需要在这个表空间增加一个数据文件。从docker中进入oracle的命令行使用超级用户su root进入路径:/u01/app/oracle/oradata/XE执行ls命令可以看到该目录下存在很多.dbf文件接着使用sqlplus system/oracle命令进入sql命令行
2020-12-27 14:51:51
464
2
原创 Cesium学习笔记(六)粒子系统
粒子系统什么是粒子系统?粒子系统是一种模拟复杂物理效果的图形技术。粒子系统是小图像的集合,当一起观察时形成更复杂的“模糊”对象,如火、烟雾、天气或烟花。这些复杂的效果是通过使用初始位置、速度和寿命等属性指定单个粒子的行为来控制的。粒子系统效果在电影和电子游戏中很常见。例如,为了表示飞机的损伤,技术美工可以使用粒子系统来表示飞机引擎上的爆炸,然后渲染不同的粒子系统来表示飞机坠毁时的烟雾轨迹。粒子系统基础看一看基本粒子系统的代码:var particleSystem = viewer.scene.p
2020-12-19 16:43:33
2064
7
原创 Cesium学习笔记(五)自定义几何形状和外观
自定义几何形状和外观有关Primitive API可用的Geometry & Appearance系统的信息,这是使用自定义网格、形状、体积和外观扩展CesiumJS的高级主题,并不适合典型的Cesium用户。几何概述Geometry定义了图元的结构,即构成图元的三角形、直线或点。Appearance定义了图元的着色,包括其完整的GLSL顶点和片段着色器以及渲染状态。使用Geometry和Appearance的好处是:性能:当绘制大量静态图元时,直接使用Geometry可以使我们将它们
2020-12-19 14:04:39
2566
1
原创 Cesium学习笔记(四)可视化图像&地形
快速开始使用Bing地图的带标签图像:Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkYTgyZmMzMC0xM2UzLTQyZjYtODVkYi0yNGYyNjk2ZDk4YmIiLCJpZCI6Mzc2MDYsImlhdCI6MTYwNTI0OTMwM30._tGGnG1gO-9KO6oRm3yFeGQ6l3E-ragZG0Wv5hmzRtM';var viewer = new Ce
2020-12-13 10:59:29
1439
原创 Cesium学习笔记(三)创建实例
第一个实例用矩形绘出俄怀明州(Wyoming)的范围:var viewer = new Cesium.Viewer('cesiumContainer');var wyoming = viewer.entities.add({ polygon : { //hierarchy定义矩形环,Cartesian3:直角坐标 hierarchy : Cesium.Cartesian3.fromDegreesArray([ -109.0
2020-12-05 15:10:44
1301
原创 Cesium学习笔记(二)使用REST API上传数据
Step1. Provide ion information about your data使用官网提供的数据文件:Reichstag.zipTo create a new asset, we POST information about our data and what we want to do with it to the /v1/assets endpoint. The POST body looks like this:const postBody = { name: 'Reich
2020-11-29 18:29:09
995
原创 Cesium学习笔记(一)
Cesium官网教程源码分析<!DOCTYPE html><html lang="en"><head> <script src="https://cesiumjs.org/releases/1.75/Build/Cesium/Cesium.js"></script> <link href="https://cesiumjs.org/releases/1.75/Build/Cesium/Widgets/widgets.css"
2020-11-29 16:49:39
1050
原创 Tomcat发布项目的推荐途径
第一步:创建一个web项目第二步:在tomcat/conf/Catalina/locolhost/目录下创建一个.xml文件,作为项目的配置文件。第三步:配置虚拟路径<?xml version = '1.0' endcoding = 'utf-8 ?><Context docBase = "项目实际路径"></Context>这个xml文件的名称就是虚拟路径,访问虚拟路径就可以访问该项目。第四步:访问项目http://locolhost:8080/虚拟路径/
2020-10-29 16:39:59
87
原创 MacOS下Tomcat的启动
tomcat版本:9.0.38安装方式:homebrewmacOS版本:10.15.6找到tomcat安装路径下的libexec/bin路径,在我的Mac上是下图路径。终端cd进入此路径:可以使用命令ls -la *.sh来查看该文件夹下后缀为.sh的文件权限信息:前面为rwxr说明拥有执行操作的权限。然后输入./startup.sh启动Tomcat:出现上图,说明启动成功。然后去浏览器输入“localhost:8080/”,出现Tomcat主页即证明启动成功。...
2020-10-29 10:40:17
263
原创 Map类的getOrDefault方法
方法介绍java.util.Map<K, V>public V getOrDefault(Object key, V defaultvalue)如果在map中找到键key匹配的值,则返回该值,否则返回默认值defaultvalue。================用法实例1:数组arr中可能存在重复元素,将数组arr中元素出现的次数记录下来。int[] arr = new int[]{11, 22, 22, 44, 55};Map<Integer, Integer>
2020-08-25 18:32:47
239
原创 C++优先队列——priority_queue
priority_queue常规用法priority_queue底层是用堆来实现的,因此可以把它看成一个堆。默认是值大的优先级高。#include <iostream>#include <queue>using namespace std;int main(){ priority_queue<int> q; q.push(4); q.push...
2020-05-04 23:20:28
280
原创 1338. 数组大小减半
1338. 数组大小减半题目连接给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。返回至少能删除数组中的一半整数的整数集合的最小大小。题解思路: 只需要记录每个元素在arr中出现的次数,将次数排序,从出现次数最多的数开始删除,累加被删除的数出现的次数,直到大于等于arr的长度的一半。不需要真的删除数据,只需要记录被删除的数据出现的次数即可。clas...
2020-05-02 10:30:45
199
原创 1382. 将二叉搜索树变平衡
1382. 将二叉搜索树变平衡题目连接题目给出一个二叉搜索树,要求输出平衡后的二叉树。利用二叉搜索树的性质,中序遍历序列是一个有序序列。然后取中序序列的中间元素作为根结点,左侧为左子树,右侧为右子树,递归建立平衡二叉树。/** * Definition for a binary tree node. * struct TreeNode { * int val; * ...
2020-05-02 10:04:24
159
原创 PAT A1143 Lowest Common Ancestor (30分)BST的最近共同祖先
一开始想到在BST中查找结点,记录查找路径,然后比较两个结点a和b的查找路径,路径中最后一个相同的结点就是最近共同祖先。于是写出了下面的代码,但是中间两个测试点运行超时。超时的原因估计是建树和查找的过程耗费时间。#include <iostream>#include <vector>using namespace std;const int maxn = 10...
2020-04-13 12:30:41
91
原创 Python数据分析学习笔记:01:lambda函数
匿名函数lambdaPython支持一种被称为匿名或lambda的函数,它仅由单条语句组成,该语句的结果就是返回值。它通过lambda关键字进行定义,这个关键字没有别的含义,仅仅是说我们现在有一个函数# 求x*2的函数常规写法def short_function(x): return x * 2# 等同于声明这样一个函数equiv_anon = lambda x: x * ...
2020-04-11 22:40:16
638
原创 项目2:数据可视化(五)绘制世界人口地图
绘制世界人口地图《Python编程:从入门到实践》这本书中使用pygal.i18n模块,该模块已被遗弃,改用pygal.maps.world模块,需要安装:pip install pygal_maps_worldimport jsonimport pygal.maps.worldfrom pygal.maps.world import *from pygal.style impor...
2020-04-11 11:34:23
1123
原创 项目2:数据可视化(四)绘制气温变化曲线
import csvfilename = 'sitka_weather_07-2018_simple.csv'with open(filename) as f: reader = csv.reader(f) header_row = next(reader) print(header_row)['STATION', 'NAME', 'DATE', 'PRCP', '...
2020-04-09 22:59:38
2946
原创 项目2:数据可视化(三)Pygal库的使用
from random import randintclass Die(): # 表示一个掷骰子的类 def __init__(self, num_sides = 6): # 骰子默认为6面 self.num_sides = num_sides def roll(self): # 返回一个位于1...
2020-04-09 19:36:58
401
原创 项目2:数据可视化(一)绘制散点图
import matplotlib.pyplot as pltplt.scatter(2, 4)plt.show()# 参数s表示小圆点的大小plt.scatter(2, 4, s = 100)# 设置图表标题并给坐标轴加上标签plt.title("Square Numbers", fontsize = 24)plt.xlabel("Value", fontsize = 14...
2020-04-09 19:31:09
914
1
原创 项目2:数据可视化(二)随机漫步
from random import choiceclass RandomWalk(): """一个生成随机漫步数据的类""" def __init__(self, num_points = 50000): """初始化随机漫步的属性""" self.num_points = num_points # ...
2020-04-09 19:26:25
245
原创 《机器学习》学习笔记
第一章 绪论基本术语数据集,示例,样本学习/训练:从数据中学得模型的过程,学得模型对应了关于数据的某种潜在的规律,因此也叫“假设”,这种潜在规律本身称为“真相”或“真实”标记:对于示例结果的信息,称之为“标记”,拥有了标记信息的示例则称之为“样例”。通俗来讲就是针对每一个训练样本x都有一个结果信息y与之对应,y就是x的标记。扩展起来所有y的集合就是标记空间,或输出空间分类与回...
2020-04-08 18:25:28
245
原创 PAT A1135 Is It A Red-Black Tree (30分)红黑树判断
维基百科:红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它在1972年由鲁道夫·贝尔发明,被称为"对称二叉B树",它现代的名字源于Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文。红黑树的结构复杂,但它的操作有着良好的最坏情况运行时间,并且在实践中高效:它可以在O(log n)...
2020-03-31 10:44:12
187
原创 PAT A1130表达式树转换为中缀表达式
给出二叉树,输出中缀表达式,并用括号表示优先级用递归来解决。根据当前遍历结点的左右子树的存在与否可以分为四种情况,其中只有三种情况有效:左右子树都存在:返回"(" + 递归访问左子树 + 该结点的值 + 递归访问右子树 + “)”;左空右不空:说明该结点是负号。返回"(" + 该结点的值 + 递归访问右子树 + “)”;左不空右空:表达式树中不存在这种情况左右全空:说明到达叶结点,...
2020-03-30 11:50:54
578
原创 PAT A1073 Scientific Notation (20分)科学计数法转成普通数字(恶心)
#include <iostream>#include <string>using namespace std;int main(){ string str; cin >> str; if(str[0] == '-') cout << '-'; //该数字为负数,先输出负号 int pos = 0; //记录'E'的下标 wh...
2020-03-22 18:37:20
100
原创 关于动态规划01背包问题的一些心得体会
《算法笔记》动态规划之01背包问题状态转移方程的代码为:for(int i = 1; i <= n; i++){ //n件物品 for(int j = w[i]; j <= c; j++){ //每件物品的重量为w[i], 价值为v[i], 背包最大容量为c dp[i][j] = max(dp[i-1][j], dp[i-1][j - w[i]] + v[i]; }} ...
2020-03-22 11:52:28
1914
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人