自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Xiami2019的博客

NaVis1mple

  • 博客(155)
  • 收藏
  • 关注

原创 iOS开发:viewController在push时隐藏bottomBar

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWill.

2021-07-30 13:51:53 216

原创 iOS开发:UICollectionView的reloadData失效问题

Objective-C开发iOS App中的UICollectionView调用reloadData失效问题。最近开发时遇到一个业务场景如下:App的首页有一个直播课程入口卡片,卡片上会显示一个数据。点击卡片进入二级页面后,有一个操作会改变这个数据,并且会发一个通知,首页监听这个通知,收到通知后在回调里调用reloadData重新加载数据。遇到的问题是直接调用reloadData失效。打断点发现数据正常修改了,Cell也正常刷了,但是切会主页后卡片上的数据还是没有正常显示。经过检查代码后发现,在

2021-07-05 14:21:11 1924

原创 iOS开发:NSTimer造成的内存泄漏问题

对于设置为重复执行模式的计时器,并且加入了RunLoop之后,它会一直有效,这种NSTimer很容易形成保留环。例如:NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(handleTimer) userInfo:nil repeats:YES];[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonMode

2021-07-02 10:54:13 429

转载 基于机器学习的文本分类

邱老师组的入门demo,github的markdown挂了来转载一下文本分类教师:邱锡鹏 微博:@邱锡鹏版权声明:本文为复旦nlp组施展根据课堂内容整理的原创文章,转载请注明出处。1 文本分类任务简介​ 在有监督学习中,需要提供一组有类别标记的样本用来学习模型以及检验模型的好 坏。这组样本集合就称为数据集。数据集用 XXX 表示,X=(x1,y1),⋅⋅⋅,(xN,yN)X = {(x^1 , y^1 ), · · · , (x^N , y^N )}X=(x1,y1),⋅⋅⋅,(xN,yN),N

2021-03-04 11:05:18 340 1

转载 linux中man 2与man 3区别

1、Standard commands (标准命令)2、System calls (系统调用)3、Library functions (库函数)4、Special devices (设备说明)5、File formats (文件格式)6、Games and toys (游戏和娱乐)7、Miscellaneous (杂项)8、Administrative Commands (管理员命令)9 其他(Linux特定的), 用来存放内核例行程序的文档。...

2021-02-16 21:46:23 408

原创 二分查找模版

模版一:无需后处理left = 0, right = length - 1;while (left <= right) { mid = (left + right) / 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1;}// 结束后:right + 1 == left// 每次都会询问nums[mid]是否等于ta

2021-01-28 10:10:42 122

原创 Vagrant常用命令

Vagrant是一个用于创建和部署虚拟化开发环境的工具常用命令如下:vagrant up:开启虚拟机;vagrant ssh:连接到虚拟机;cd vagrant:进入虚拟机和宿主机共享的目录;Vagrantfile所在位置的所有子目录都会成为虚拟机和宿主机共享的目录;logout或者ctrl+D退出VM终端;vagrant suspend:保存虚拟机的状态并且停止他;vagrant halt:关闭虚拟机;vagrant reload:重启虚拟机;vagrant destroy:移除虚拟机

2021-01-26 10:27:25 255

原创 每日一题 由斜杠划分区域 LeetCode959

并查集问题,把每个单元格看作是四个小三角形,然后对各个小三角形进行合并。// 每一个单元格可以分为四个小单元格,然后根据每个位置的字符进行单元格内合并或单元格间合并class UnionFind {public: UnionFind(int n): f(n), count(n) { for (int i = 0; i < n; ++i) { f[i] = i; } } int findf(int x) {

2021-01-25 10:41:52 111

原创 每日一题 连通网络的操作次数 LeetCode1319

裸并查集,并根据图论知识判断,如果边数大于等于顶点数减一,就一定可以改造成连通图。// 坚韧不拔,我命由我不由天!// 因为边可以任意移动,所以只要边数大于等于计算机数减一,就一定可以连通// 所需要的最小操作数等于连通分量数减一class UnionFind {public: UnionFind(int _n): f(_n), setSize(_n, 1), n(_n), setCount(_n) { for (int i = 0; i < n; ++i) {

2021-01-23 09:29:20 133 1

原创 01背包问题变式 分割等和子集

LeetCode 416 分割等和子集这道题可以看成是01背包问题,总和为m,则问题可以改写为是否能选出一些元素,恰好填满容量为m / 2的背包。状态定义:dp[i][j]: 表示使用第0到第i个物品能否填满容量为j的背包;状态转移方程:设第i个物品的体积为nums[i];if nums[i] == j:此时一定可以填满,dp[i][j] = true;if nums[i] < j:此时分装上i和不装上i两种情况:dp[i][j] = dp[i - 1][j] (不装i的情况) ||

2021-01-22 20:37:22 263

原创 SQL WHERE子句操作符

《MySQL必知必会》笔记操作符说明=等于<>不等于!=不等于<小于<=小于等于>大于>=大于等于BETWEEN在指定的两个值之间

2021-01-20 18:37:00 127

原创 MySQL命令行启动指令

/usr/local/MySQL/bin/mysql -u root -p

2021-01-20 17:52:26 223

原创 C++11的引用折叠

创建一个引用的引用,引用就会折叠。除了右值引用的右值引用折叠之后还是右值引用之外,其它的引用全部折叠成左值引用。X& &、X& &&、X&& &都折叠成X&X&& &&折叠为X&&参考博客...

2021-01-20 14:00:09 392

原创 每日一题 连接所有点的最小费用 LeetCode1584

由完全图构建最小生成树,主要有两种方法:1. Kruskal算法;2. Prim算法;Kruskal算法需要构建并查集检查每次新添加的边构不构成回路。// 本质是求解一个完全图的最小生成树;// 使用kruskal算法需要通过并查集判断连通性,使用Prim算法则不用;// 首先需要将所有边都提取到一个边集里面,然后对边长进行排序;// 每次选取最短的边,然后通过并查集判断连通性// lion is hungryclass DisjointSet {private: vector

2021-01-19 23:35:22 168

原创 经典DP 完全背包问题

完全背包是01背包的扩展,即每个物品是无限量供应的。LeetCode322 零钱兑换比较经典的完全背包问题。定义子问题:组成金额i所需要的最小硬币数状态:T(i) = 组成金额i所需要的最小硬币数,如果不能组成则用amount + 1表示,初始数组全部初始化成amount + 1T(i) = min(T(i - k) + 1) (k为不同面值的硬币)class Solution {public: int coinChange(vector<int>& coins,

2021-01-19 15:35:26 208

原创 MySQL的show语句

show databases:返回可用数据库的一个列表,包括MySQL内部使用的数据库和用户创建的数据库;show tables:返回当前选择的数据库内可用表的列表。show columns from 表名:show columns要加上表名,返回一个表中的字段信息;describe 表名 = show columns from 表名,是一种快捷方式;show status:用于显示广泛的服务器状态信息;show grants: 用来显示授予用户(所有用户或特定用户)的安全权限;show err

2021-01-18 21:25:25 123

原创 数据库基础概念

数据库:是保存有组织的数据的容器。关系数据库指由表构成的数据库,一张表就代表了一个关系。数据库软件称为数据库管理系统(DBMS),数据库是通过DBMS创建和操纵的容器。表(table):某种特定类型数据的结构化清单。数据库中的每个表都有一个名字用来标示自己。此名字是唯一的,数据库中没有其它表具有相同的名字。模式:关于数据库和表的布局以及特性的信息。可以用来描述数据库中特定的表以及整个数据库和其中表的关系。换句话说,数据库模式是数据库的逻辑设计,而数据库实例是给定时刻数据库中数据的一个快照。列:表中

2021-01-18 20:58:40 186

原创 每日一题 账户合并 LeetCode721

这个月LeetCode真的猛出并查集,学不会并查集谁也别想走。并查集方法最重要的方法就是对问题进行建模,使得问题用连通分量表示,并且转化为判断两点是否连通的问题。然后要思考在构建并查集的过程中要如何构建并查集。哈希表加并查集需要两个哈希表,分别将邮箱映射成index和映射到对应的用户的名字。把每个用户对应的邮箱地址看成是一个连通分量。构建连通分量时只需要把accounts数组中每个用户对应的邮箱地址合并起来就好。// 并查集class UnionFind {public: UnionF

2021-01-18 15:04:50 141

原创 经典DP问题:最长递增子序列和最长公共子序列

LIS问题:最长递增子序列(Longest Increasing Subsequence);LCS问题:最长公共子序列(Longest Common Subsequence);子序列(subsequence)和子串(substring)的概念:子序列不要求连续,而子串必须由连续的字符组成。LIS问题时间复杂度:O(n^2);空间复杂度:O(n);设置一个DP数组,维护每个位置的符号作为结尾的最小的序列长度;class Solution {public: int lengthOfLIS

2021-01-18 12:18:18 115

原创 每日一题 打砖块 LeetCode803

如何计算每次击碎砖块而消失的砖块数量和顶部相连的砖块不会掉落;击碎一个砖块,可能使得其它与之连接的砖块不再与顶部相连而消失;消失的砖块数量 = 击碎之前与顶部相连的砖块数量 - 击碎之后与顶部相连的砖块数量 - 1 (1就是直接被敲碎的那块砖)并查集的按秩优化的秩即可以指当前子树的高度rank,也可以指当前集合的结点总数size,此题按size优化很huochi如何使用并查集解决这个问题?消除一个砖块的效果是:一个连通分量被分成了两个连通分量;并查集的作用是:把两个连通分量合并成一个连通分

2021-01-16 23:29:14 100

原创 Linux I/O多路复用

IO多路复用(multiplexing)本质是通过系统内核缓冲IO数据,让单个进程可以监视多个文件描述符,一旦有某个描述符就绪(读就绪或写就绪),进程就可以进行相应的操作。select、epoll、poll是Linux提供的IO多路复用API。Linux五种IO模型:阻塞IO Blocking IO非阻塞IO Nonblocking IOIO多路复用 IO Multiplexing信号驱动IO Signal Driven IO异步IO asynchronous IO前四种都属于同步IO,

2021-01-16 15:22:05 156

原创 Linux五种I/O模型

《Unix网络编程》中提到的五种I/O模型有Blocking I/O 阻塞I/O;NonBlocking I/O 非阻塞I/O;I/O Multiplexing I/O多路复用;Signal Driven I/O 信号驱动I/O;Asynchronous I/O 异步I/O;前四种属于同步I/O,即进程在等待相关IO操作时要进入阻塞态。异步I/O指进程等待I/O操作时可以不处于阻塞态。I/O的两个阶段:等待数据准备;进程通过CPU将数据拷贝到内存(不使用DMA的情况);...

2021-01-16 10:55:24 83

原创 每日一题 移除最多的同行或同列石头 LeetCode947

这是一个图论问题,首先按照题意构建图。石头作为顶点。如果两个石头位于同一行或同一列,则认为这两个石头之间有一条边,即这两个石头位于同一个连通分支之内。由题中删除石头的规则可知,实际上就是不断删除连通分支之内的顶点。而每个连通分支最后都会剩下一个顶点。所以,可以移除的最大的石头数 = 石头总数 - 连通分支数。所以题目就转化为两步,首先要构建图,然后再计算图中的连通分支数。计算连通分支数一般有两类方法,一是使用DFS或BFS之类的搜索方法,二是使用并查集的方法。这里考虑并查集的方法并查集并查集回答

2021-01-15 11:28:55 131

原创 每日一题 冗余连接 LeetCode 684

基本是个裸并查集的题目,从edges数组中遍历每条边,并构造并查集。如果一条边的两个顶点,则这条边就是构成回路的最后一条边。又因为无向图是由一棵树加上一条额外的边所构成的,所以显然,这样的回路只存在一个,则这样的一条边就是所求。// 并查集class Solution {public: int findf(vector<int> &f, int nodes) { if (f[nodes] != nodes) { int father

2021-01-13 22:09:32 121 1

原创 C++中的左值右值,左值引用右值引用,以及std::move,std::forward函数的作用

C++11中左值和右值的概念比较关键。1. 左值和右值左值(lvalue)是放在赋值语句左边可以被赋值的值,左值必须在内存中有一个确定的地址。右值(rvalue)用来放在赋值语句右边,将自己的值取出赋给别的变量,右值没有一个确定的地址。2.引用引用是C++所做的语法优化,本质是靠指针来实现,引用相当于变量的别名。声明引用的时候必须初始化,且一旦绑定,就不能把引用绑定到其他对象。即引用必须初始化,不能对引用重定义。对引用的一切操作,都相当于对原始对象的操作。3.左值引用和右值引用左值引用:顾名

2021-01-12 15:48:21 344

原创 每日一题 滑动窗口最大值 LeetCode239

虽然是个做过的题,但是早上心烦意乱,基本还是纯抄leetcode题解。法一:优先队列要维护一个滑动窗口内的最大值,可以使用优先队列法,即使用一个最大堆来维护。为了判定当前最大值是否还存在于滑动窗口内,可以同时存储value和index,这样当每次向优先队列加入新元素时,可以将堆顶所有不属于当前窗口的元素都弹出,保证优先队列维持的最大元素是在滑动窗口中的元素。class Solution {public: vector<int> maxSlidingWindow(vector&lt

2021-01-12 14:31:06 91

原创 每日一题 旋转数组 LeetCode189

408牛逼数组翻转先翻转前k个,再翻转后面的,然后再整个翻转。核心就是翻转数组元素的函数。有个点要注意,要用k模一下数组长度n。class Solution {public: void reverseArray(vector<int>& nums, int start, int end) { // 对数组进行翻转 if (start >= end || start < 0 || end < 0) return; for (

2021-01-08 16:41:07 128

原创 每日一题 省份数量 LeetCode 547

这题的本质就是求联通分支。上一题刚刚用了并查集,再一看这题不就是一个裸并查集么。法一:并查集// 法一 并查集class Solution {public: int findf(vector<int>& f, int x) { //找一个结点的父结点; if (f[x] != x) { int father = findf(f, f[x]); f[x] = father; }

2021-01-08 16:18:27 82

原创 每日一题 除法求值 LeetCode 399

这道题的本质是个图论问题,应该将问题建模为一个有向图,将除法表达式的变量看作是图的顶点,除法与被除数通过弧的方向来表示,除法表达式的值看作是边的权值,所以只需判断除法表达式的两点在图中是否存在路径,并且路径上每段距离的乘积就是最终表达式的结果。法一:广度优先搜索先构造图的表达形式,这里采用临接表来存储图,然后进行广度优先搜索,如果从起点出发搜到了终点,则表示这两个点之间存在路径,则把每段路径的乘积计算出来即可。class Solution {public: vector<double&

2021-01-08 14:46:12 115

原创 写于2021春招之前

不再逃避,勇往直前2020匆匆而过,原本憧憬的留学生生活也化为泡影,一整年的时间仿佛是由焦虑和欢乐拼凑而成,混合杂糅,难以分辨。年初也因为了面试了几家大厂遭遇失败而导致心灰意冷,直接选择了考研,勇猛逃避大半年。逃避虽然可耻但是有用,经过这半年的沉淀,也想明白了很多事,决定静下心来,脚踏实地,一步一步努力,备战春招。眼高手低是最大的敌人,只有低头默默前行,猛然抬头,才能看到终点的曙光。...

2021-01-04 10:51:27 50

原创 每日一题:正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*‘的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例2:s = “aa”p .

2020-06-20 11:46:48 305

原创 C++的类型转换

《C++ Primer Plus》笔记C++自动执行很多类型转换:将一种算术类型的值赋给另一种算术类型的变量时,C++将对值进行转换;表达式中包含不同的类型时,C++将对值进行转换;将参数传递给函数,C++将对值进行转换;初始化和赋值进行的转换:C++允许将一种类型的值赋给另一种类型的变量。这样做时,值将被转换为接收变量的类型。将一个值赋给取值范围更大的类型通常不会导致什么问题,只是占用的字节更多而已。然而,将一个很大的long值赋给float变量将降低精度。因为float只有6位有效数.

2020-06-19 15:01:35 481

原创 Django中的视图(views.py)

千锋教育网课笔记视图视图本质上是一个函数(类)。这个函数第一个参数的类型是HttpRequest,它返回一个HttpResponse实例。为了使一个Python函数成为一个Django可识别的视图,它必须满足这两个条件。作用:接收并处理请求,调用模型和模版,响应请求(返回HttpResponse或其子类)响应模版;重定向;直接响应字符串;响应错误模版;json数据;HttpRequestHttpRequest是服务器传递过来的请求对象,经过了Django框架的封装,Django框.

2020-06-17 21:23:40 680

原创 Django项目配置文件

当创建一个新的Django项目后,默认的配置文件有如下几个:__init__.py: 包标志;settings.py: 项目配置文件;urls.py: 路由映射表;wsgi.py: wsgi接口;manage.py: 项目管理命令;manage.py是Django用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成。...

2020-06-17 15:19:07 705

原创 斐波那契数列问题总结

n比较小的时候,可以直接使用递归法来求解,不做任何记忆化操作,时间复杂度是O(2^n),存在很多冗余计算;一般情况下,可以使用“记忆化搜索”(即动态规划)或者迭代的方法,实现这个转移方程,时间复杂度和空间复杂度都可以做到O(n);为了优化空间复杂度,可以不保存f(x-2)之前的项,我们只用两个变量来维护f(x-1)和f(x-2),这样就可以把时间复杂度优化到O(1);随着n的不断增大,O(n)可能已经不能满足我们的需要了,我们可以用“矩阵快速幂”的方法把算法加速到O(logn);也可以利用斐波那契.

2020-06-15 16:35:45 267

原创 C++共用体(Union)

《C++ Primer Plus》笔记共用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,结构可以同时存储int、long和double,共用体只能存储int、long或double。共用体的句法与结构相似,但含义不同。例如:union one4all{ int int_val; long long_val; double double_val;};可以使用one4all变量来存储int、long或double,条件是在不同的时间进行;.

2020-06-15 13:55:14 272

原创 Python中items(),iteritems()和operator.itemgetter()函数

items函数可以将一个字典以列表的形式返回;iteritems函数将一个字典中元素的序列以迭代器的形式返回;operator.itemgetter()是operator包里的一个函数,用于获取对象某一维的数据;operator.itergetter()函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。例如多用在sorted的参数中:key=operator.itergetter(1)使用元素第二维的数据进行排序。...

2020-06-14 09:37:37 470

原创 每日一题:每日温度(Daily Temperatures)

根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。单调栈遍历整个数组,使用一个栈来作为保存数组元素.

2020-06-11 10:07:31 492

原创 C++面向行的输入(getline和get)

《C++ Primer Plus》笔记getline()getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。要调用这种方法,可以使用cin.getline()。该函数有两个参数。第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数。如果这个参数为20,则函数最多读取19个字符,余下的空间用于存储自动在结尾处添加的空字符。getline()成员函数在读取指定数目的字符或遇到换行符时停止读取。getline()函数每次读取一行。它通过换行符来确定行尾,但不保存换行.

2020-06-09 21:37:18 369 1

原创 C++的类型转换

《C++ Primer Plus》笔记在同一个表达式中包含两种不同的算术类型时,C++将执行两种自动转换:首先,一些类型在出现时便会自动转换;其次,有些类型在与其他类型同时出现在表达式中时将被转换。自动转换:在计算表达式时,C++将bool、char、unsigned char、signed char和short值转换为int。具体地说,true被转换为1,false被转换为0。这些转换被称为整型提升(integral promotion)。还有其他一些整型提升:如果short比int短,则un.

2020-06-09 11:08:34 1168

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除