自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 收藏
  • 关注

原创 发生段错误的原因

通常发生在访问非法内存地址的时候,主要是以下几种情况:1.使用野指针2.修改字符串常量的内容

2021-05-07 16:37:12 287 1

原创 c++常用转义序列

2021-03-16 17:09:21 273

原创 libevent 创建TCP连接流程以及代码

服务器端 libevent 创建TCP连接创建event_base_new();使用 evconnlistener_new_bind 创建监听服务器,设置其回调函数listner_cb(),当有客户端成功连接时回调函数被调用。封装 listner_cb() ,在函数内部,完成:创建bufferevent事件对象,bufferevent_socket_new();使用bufferevent_setcb() 函数给bufferevent的 read、write、event 设置回调

2021-03-05 09:10:20 632 1

原创 TCP通信和UDP通信各自的优缺点以及适用场景

TCP: 面向连接的,可靠数据包传输。对于不稳定的网络层,采取完全弥补的通信方式。 丢包重传。​ 优点:稳定:数据流量稳定、速度稳定、顺序​ 缺点:传输速度慢。效率低。开销大。​ 使用场景:数据的完整型要求较高,不追求效率。(追求准确性的)​ 大数据传输、文件传输。(迅雷)UDP: 无连接的,不可靠的数据报传递。对于不稳定的网络层,采取完全不弥补的通信方式。 默认还原网络状况​ 优点:传输速度块。效率高。开销小。缺点:不稳定:数据流量,速度,顺序。​ 使用场景:对时效性要求较高场合。稳

2021-03-03 17:31:51 818 1

原创 力扣 LeetCode 995. K 连续位的最小翻转次数

用一个队列q来表示这个数字之前与之相关的数字(就是比如说A=【0,0,1】,K=2,那么当第0位数字0进行翻转时,第2位数字1并不会翻转,这样第0位和第2位就是不相关的数字)翻转了几次(如果该数字进行翻转,则把其加入队列,然后用q.size()可以表示翻转了几次,如果q的最前面的数字+K>i,表示此时q的最前面的数字已经不会影响后面的数字了,此时可以删掉),如果翻转了奇数次并且A[i]=1,那么此时该数字也需要翻转,同理,如果翻转了偶数次并且A[i]=0,那么此时该数字也需要翻转。然后当i&gt..

2021-02-18 11:41:36 237 2

原创 力扣 LeetCode 561. 数组拆分 I

这一题其实就是让你把从小到大排序,然后从头开始取两个数字中的较小值,这样得到的结果必然最大。class Solution {public: int arrayPairSum(vector<int>& nums) { sort(nums.begin(),nums.end()); int res=0; for(int i=0;i<nums.size();i+=2){ res+=nums[i]; .

2021-02-16 10:40:11 108

原创 力扣 LeetCode 485. 最大连续1的个数

遍历一遍数组,用temp记录数组中出现1的个数,用res,记录结果,如果是1则temp++,如果是0比较res和temp的值,取较大值变为res,同时让temp清零重新记录。class Solution {public: int findMaxConsecutiveOnes(vector<int>& nums) { int n=nums.size(); int res=0; int temp=0; for(in.

2021-02-15 09:27:45 119

原创 力扣 LeetCode 765. 情侣牵手(建议改成情侣分手)

这一题方法很多,但是看到数值范围在4——60之间,直接用最朴素的方法,每当两个配对不成功的时候,直接往后找配对的数字,找到后交换这两个数字。这样时间复杂度为O(n2),满足条件。class Solution {public: int minSwapsCouples(vector<int>& row) { int n=row.size(); int res=0; for(int i=0;i<n;i+=2){ .

2021-02-14 09:57:51 190

原创 力扣 LeetCode 665. 非递减数列

遍历数组,先去查找是否存在 nums[i] > nums[i + 1],如果有的话记录下来+1,在此基础上还要进行二次判断(比如3 4 2 3,如果只记录nums[i] > nums[i + 1]的个数的话只有一个,但是事实上这个数组不满足改变一个数字就变成非递减数组),二次判断的条件是,这四个数字中,第一个数字要小于第三个数字,第二个数字要小于第四个数字,即nums[i-1]<nums[i+1]并且nums[i]<nums[i+2](要排除i=0和i=nums.size()-2的.

2021-02-07 10:12:20 157

原创 力扣 LeetCode 1423. 可获得的最大点数

这一题可以把题目转换一下,在cardPoints数组最后插入开头k个数字,然后就可以使用滑动窗口求最大值了。例如:令k=3,则向0 1 2 3 4 5 6 数组插入头三个数字0 1 2,变成 0 1 2 3 4 5 6 0 1 2(此时其实已经不用管开头的0 1 2了,但是数组插入再删除太麻烦了,我就保存了开头的0 1 2),那么我们可以只管最后那部分,变成求包含0(开头数字)或者1(结尾数字)的最大k个值,换种说法就是末尾index>=cardPoints.size()-1的k个连续值的最大..

2021-02-06 10:28:27 191

原创 力扣 LeetCode 888. 公平的糖果棒交换

由于要交换完以后的总量相同,所以首先一定要求sumA和sumB,然后找到他们的差值temp,这里有一个要注意的点,A 中的值valA和B中值valB交换后,对于sumA-sumB来说其实是差了2倍valA-valB(即两倍的temp)。然后我们要做的就是找到2(valA-valB)=temp。我用的办法是先把A和B进行从小到大排序,然后再用两个index1和index2来表示当前的valA和valB的位置,然后如果A[index1]-B[index2]<temp/2,说明此时A的值太小,index..

2021-02-01 10:28:23 143

原创 力扣 LeetCode 1358. 包含所有三种字符的子字符串数目

用双指针l和r,l为左边界,右边界为r,计算从l到r满足a b c出现次数都大于等于1,r为其中的最小坐标,当然后l——r+1,l——r+2……l——s.size()-1都必然满足a b c出现次数都大于等于1,所以可以直接计算从l开头的子串满足要求的有s.size()-r个,然后再把l++,把s[l]对应的a或者b或者c的个数–,然后在计算该情况下a b c是否都大于0,如果有字母不大于0则r++,同时s[r]对应点字母++,直到a b c都大于0,然后res累加s.size()-r即可class S.

2021-01-28 22:44:08 284

原创 力扣 LeetCode 1128. 等价多米诺骨牌对的数量

把所有数组都排序一遍,令所有的dominoes[i][0]<dominoes[i][1],然后再让数组按照dominoes[i][0]从小到大排序,这样的话,所有的等价多米诺骨牌对都是相连的了,然后只要遍历一遍数组,就可以得到等价的骨牌对了。class Solution {public: int numEquivDominoPairs(vector<vector<int>>& dominoes) { int n=dominoes.size(.

2021-01-26 09:44:30 132

原创 力扣 LeetCode 1319. 连通网络的操作次数

首先,当connections.size()<n-1的时候,必不可能全部连接,返回-1。然后利用并查集,将所有互联的计算机共用一个parent,只要看有几个parent[i]=i即可知道需要操作几次。class Solution {public: int find(vector<int>& parent,int x){ return x==parent[x] ? x:find(parent,parent[x]); } int mak...

2021-01-23 22:08:41 164 1

原创 力扣 LeetCode 1018. 可被 5 整除的二进制前缀

令sum为N_i%5的的余数,那么N_i+1的sum为N_i的sum*2+A[i+1],然后利用该式子即可求出答案class Solution {public: vector<bool> prefixesDivBy5(vector<int>& A) { vector<bool>res; int index=0; int sum=0; while(index<A.size()){..

2021-01-14 10:29:10 112

原创 使输入序列长度相同的方法 keras.preprocessing.sequence.pad_sequences(用于LSTM使输入句子长度相同)

官方摘要keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32', padding='pre', truncating='pre', value=0.)功能将多个序列截断或补齐为相同长度。该函数将一个 num_samples 的序列(整数列表)转化为一个 2D Numpy 矩阵,其尺寸为 (num_samples, num_timesteps)。 num_timesteps 要么是

2021-01-13 11:46:56 628

原创 力扣 LeetCode 516. 最长回文子序列

用二维动态规划,从最后开始判断(这样比较方便),dp[i][j],i表示首字母,j表示末字母,如果s[i]=s[j],那么dp[i][j]=dp[i+1][j-1]+2,不然的话就等于dp[i+1][j]和dp[i][j-1]中较大值。class Solution {public: int longestPalindromeSubseq(string s) { int n=s.size(); vector<vector<int>>dp(n.

2021-01-08 11:49:30 156

原创 力扣 LeetCode 991. 坏了的计算器

反向思考,X到Y的过程,其实也就是Y变为X的过程,题目可以理解成,由Y变为X的过程中,只能除以2(使Y变小)或者+1(使Y变大),问需要的最少次数。这样子会清楚不少(对我而言),当X大于Y的时候,次数就是X-Y。而当Y大于X的时候,先判断Y是否可以整除2,如果可以则整除2,不可以则+1在整除2。然后重复这个过程,当Y<X后,再不断给Y+1即可得到答案。class Solution {public: int brokenCalc(int X, int Y) { if(Y&..

2021-01-07 20:55:50 145

翻译 Gated Neural Networks for Targeted Sentiment Analysis原文、翻译及代码

论文地址代码地址摘要目标情感分析对给定文本文档中每个目标实体提及的情感极性进行分类。Seminal方法从自动句法解析树中提取人工离散特征,以捕获封闭句对目标实体提及的语义信息。最近,已经证明了不使用句法解析器就可以实现有竞争力的准确度,因为句法解析器在推文等嘈杂的文本上可能非常不准确。这是通过在根据目标实体提及的推文的简单和直观的分割上应用分布式词表示和丰富的神经池函数来实现的。在本文中,我们扩展了这一思想,提出了一个句子级的神经模型来解决池化函数的局限性,因为池化函数没有明确地模拟推文级语义。首先,

2021-01-07 20:41:57 410 2

翻译 Linguistically Regularized LSTM for Sentiment Classification 论文原文、代码实现以及翻译

论文原文地址论文代码摘要本文主要讨论句子级情感分类。虽然近来已经有多种神经网络模型被提出,但是,以往的模型要么依赖于昂贵的短语级标注,大多数模型在仅用句子级标注训练时性能明显下降;要么没有充分运用语言资源(如情感词库、否定词、强度词)。在本文中,我们提出了用句子级注释训练的简单模型,同时也尝试对情感词库、否定词和强度词的语言作用进行建模。结果表明,我们的模型能够捕捉情感词、否定词和强度词在情感表达中的语言作用。1 介绍情感分类的目的是将文本划分为情感类,如正面或负面,或更细粒度的类,如非常正面、正

2021-01-06 10:53:13 633

原创 力扣 LeetCode 200. 岛屿数量

利用dfs遍历岛屿以及邻近的区域,把所有遍历过的岛屿变为0,防止再次遍历。class Solution {public: int numIslands(vector<vector<char>>& grid) { int res=0; for(int i=0;i<grid.size();i++){ for(int j=0;j<grid[0].size();j++){ ..

2021-01-06 09:50:20 98

原创 力扣 LeetCode 5642. 大餐计数

利用set s把所有出现的数字按从小到大记录下来,并转为vector v,并用哈希表m记录出现的次数。然后遍历这些出现过的数字,由于最大值不会超过2的20次方,那么可以得到两个数字相加最大不会超过2的21次方,然后令maxVal为2的21次方(我令其为2的20次方,可以少运算一次,最后再计算2的21次方出现的次数,效果一样的),令maxVal减去出现过得数字v[i],看m[maxVal-v[i]]是否有值(比如你有一个值2,那么实际上你只要去找存不存在4-2、8-2、16-2……就行)。然后令maxVal.

2021-01-03 15:30:35 145

原创 力扣 LeetCode 5210. 球会落何处

这个题主要就是两个点,一个是当球落在(x1,y1)如果y1为0,说明此时该点已经在最左边了,如果此时该点值为-1,则会被卡在左边,同理,如果y1为grid[i].size()-1,说明此时该点已经在最右边了,如果该点值为1,则会被卡在右边。第二点是,如果球在(x2,y2)时,如果值为1,则要看(x2,y2+1)是否为-1,如果是-1则球会被卡在该点,同理如果值为-1,则要看(x2,y2-1)是否为1.class Solution {public: int finallGrid(ve..

2020-12-27 15:03:32 147

原创 力扣 LeetCode 5638. 吃苹果的最大数目

从最后一天开始计算,计算在该天情况下能吃到苹果的最后一天,如果这一天还没吃到苹果,就把res+1,同时设置该天能吃到苹果。class Solution {public: int eatenApples(vector<int>& apples, vector<int>& days) { int len=apples.size(); int m[40000]={0};//如果该天能吃到苹果则变为1; int r

2020-12-27 14:51:55 200

原创 力扣 LeetCode 455.分发饼干

首先把g和s排序,我选择的是从小到排,然后用贪心思想,让需要糖最大的人先拿走最大的糖,这样可以满足尽可能多的人,然后只要遍历一遍g即可。class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { if(s.size()==0||g.size()==0) { return 0; }..

2020-12-25 09:45:17 164

原创 python 自动划分数据集为测试集和验证集train_test_split

如果不想看具体参数的可以拉到最后看通常使用方式用train_test_split可以自动帮你把数据集划分为测试集和验证集from sklearn.model_selection import train_test_splitoutput= sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)

2020-12-25 09:42:03 5378

原创 力扣 LeetCode 915. 分割数组

从左到右遍历一遍,用一个max_val记录遍历过程中遇到的最大值,用一个lmax_val记录左边子数组中的最大值,左边子数组的要求为,右边的值都大于左边的值,及当遍历到一个数字小于lmax_val时,则到该元素为止的所有值都归左边子数组,此时lmax_val=max_val。class Solution {public: int partitionDisjoint(vector<int>& A) { int index=0; int res=.

2020-12-24 21:21:32 337

原创 tensorflow-gpu1.X版本和2.X版本详细安装流程(使用了清华的镜像源,包括cuda和cudnn安装)

TensorFlowgpu版本安装首先要看你要下载多少版本的TensorFlow,1.X版本和2.X版本的TensorFlow语法差别还是有一些大的。然后选择好要下载的版本后,(一般1.X的我都推荐下载1.14.0,2.X的话就下载最新版好了)。输入pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ tensorflow-gpu==1.14.0//这里版本号可以换成你需要的版本号,可以写成2.1.0等等cuda安装下载完以后,你要确定

2020-12-24 15:46:24 2185

原创 力扣 LeetCode 面试题 16.20. T9键盘

用一个letters[10]记录手机字母,再把word[i]长度与num长度对比,如果一样,则利用atoi函数把num[j]变为数字a,去看letters[a]中是否含有word[i][j]class Solution {public: string letters[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; vector<string> getValidT9Words(string nu.

2020-12-24 09:20:08 265

原创 torchtext中 TEXT.build_vocab 只取频率最大的前n个单词 以及取出现频率大于n次的方法

context.bulid_vocab(train_data,max_size=10000) #将词汇表中频率前10000的单词取出来context.bulid_vocab(train_data,min_freq=10) #将词汇表中频率大于等于10的单词取出来

2020-12-23 21:21:29 1850 1

原创 力扣 LeetCode 387. 字符串中的第一个唯一字符

该题做法很多,最简单的是用哈希表记录字母出现次数和首次出现的位置,如果出现次数为1则记录其中出现的最早位置,如果没有1则返回-1.但是这种方法耗时较长(我一直怀疑map调用时间只有o(1)是骗人的,我每次用时间都特别长),由于只含小写字母,用一个vectorv(26)数组记录,初始值都赋值为s.size(),然后如果字母第一次出现则把值变为该值的索引,第2次出现开始(此时该字母对应的vector值必定不为len)则把其变为len+1,然后遍历一遍vector,即可知道第一次出现的最小值。class S

2020-12-23 09:48:29 206

原创 jupyter Notebook使用matplotlib时显示动图

在导入包的时候导入display包from IPython import display然后在把图画完以后,输入plt.pause(0.1)#每次显示图片的暂停时间display.clear_output(wait=True)#每次显示完图以后删除,达到显示动图的效果即可出现显示动图效果...

2020-12-22 10:36:17 1769

原创 力扣 LeetCode 103. 二叉树的锯齿形层序遍历

用一个bfs,然后记录每层的层序为h,奇数层则让vector从头插入,偶数层从尾部插入即可/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solutio.

2020-12-22 09:11:58 145 1

原创 力扣 LeetCode 746. 使用最小花费爬楼梯

用动态规划即可,只要注意dp[1]=cost[1]。class Solution {public: int minCostClimbingStairs(vector<int>& cost) { int len=cost.size(); vector<int>dp(len,0); dp[0]=cost[0]; dp[1]=cost[1]; for(int i=2;i<len;i+.

2020-12-21 10:19:02 85

原创 力扣 LeetCode 316. 去除重复字母

先把所有的字母都遍历一遍记录下出现次数,然后再将s从前向后遍历,如果res中最后一位比s[i]的小则s[i]存入res,如果遇到大的,则判断后面的数组中是否还有res中的最后一位,如果有则将其删除,循环判断直到res为空或者没有最后一位了或者s[i]大于res中最后一位。class Solution {public: string removeDuplicateLetters(string s) { string res; map<char,int>.

2020-12-20 21:27:53 149

原创 力扣 LeetCode 48. 旋转图像

由于题目要求原地旋转,所以考虑从图像本身入手,把它看成一题数学题,就会发现把矩阵旋转相当于是先对其做轴对称操作,再做一次上下对称操作。例:1 2 3 轴对称 9 6 3 上下对称 7 4 1 4 5 6 ——> 8 5 2 ——> 8 5 2 7 8 9 7 4 1 ..

2020-12-19 09:50:47 133 1

原创 力扣 LeetCode 389. 找不同

由题目可以想到,可以把题目看成所有的字母都出现了两次,只有一个字母出现了一次,怎么找到这个字母。有一个想法是,一个数字,异或它自己为0,比如1^1=0,3^3=0,0异或一个数字等于该数字,比如11^0=0,234^0=234.可以把这个思路运用到字母上,字母异或自己就会变为ascii码0的字符,ascii码0的字符异或任意一个字母等于该字母,由于所有字母都出现两次只有被添加的字母出现了一次,所以只要异或所有字母就会把添加的字母得到。class Solution {public: char ..

2020-12-18 09:04:35 146

原创 力扣 LeetCode 937. 重新排列日志文件

设置两个vector chars 和nums,用来保存字母日志和数字日志。然后使用s1保存标识符,读取标识符和空格后的第一个字符,如果是数字则存入nums中,如果是字母则把标识符放入到内容s2之后并用空格分离,形成新的字符串存入chars,这样直接对chars进行排序,内容中字母在前的s2就在前,内容相同的会比较标识符s1。然后把chars中的新字符串重新还原成字母日志,插入到结果中,然后再把nus中的日志还原。class Solution {public: vector<strin.

2020-12-16 15:46:45 177

原创 力扣 LeetCode 290. 单词规律

先把str以空格分开,存入s中,再利用哈希表m,把每个pattern中的字母pattern[i]作为序号,s[i]作为其中的值,进行遍历,如果pattern[i]中有值但是不为s[i]说明此时不遵循规律。此外要注意pattern的长度要与s长度相同,class Solution {public: void split(const string& s,vector<string>& sv,const char flag = ' ') { sv.clear();.

2020-12-16 10:21:01 281

原创 力扣 LeetCode 386. 字典序排数

用dfs,从1开始遍历。class Solution {public: vector<int>res; void dfs(int n,int num){ if(num>n){ return; } else{ res.push_back(num); } for(int i=0;i<=9;i++){ dfs(n,nu.

2020-12-15 17:35:48 127

空空如也

空空如也

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

TA关注的人

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