自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (1)进程间常见的几种通信方式

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC)。直到进程 A 访问完共享内存,才会执行 V 操作,使得信号量恢复为 0,接着就会唤醒阻塞中的线程 B,使得进程 B 可以访问共享内存,最后完成共享内存的访问后,执行 V 操作,使信号量恢复到初始值 1。如果大于等于0,则说明还有资源可用,进程可以正常执行。

2023-08-28 16:56:45 385

原创 RSA加密解密算法原理以及实现

从古至今,如何用最有效的加密手段保护信息的安全性使之不被窃取、篡改或者破坏都是人们在信息传播中普遍关注的重大问题。最古老的文件加密手段莫过于对称加密,什么是对称加密,打个比方,有一个商人需要给合作伙伴送一批贵重的货物,他便将货物放在一个设置好密码的箱子中,这个密码只有商人知道,同时他又将设置好的密码提前告知合作伙伴,货物送达后,合作伙伴便可以用被告知的密码打开箱子取出货物。即用一种方法加密, 用同一种方法解密, 即为对称加密。

2023-08-16 18:05:39 7261 10

原创 哈希表刷题总结

哈希表刷题总结

2022-11-14 21:18:37 226 1

原创 python快速入门系列

一、python以及pycharm的安装我用的python版本为3.6版本,pycharm使用的是社区版。二、python的基础语法2.1 python的书写规则if(10-9>0): print("10>9") 一个语句块可以写在一行,但为了直观,若一个语句块写在两行,则要进行缩进,缩进的格式为4个空格。2.2python的基本数据结构注:在python里单引号和双引号都可以表示字符串,如果一个字符串包含单引号则表示必须用双引号,其他情况单引号双引号没有区别。

2022-02-12 20:56:35 612

原创 网络协议入门|(一)网络协议概述

为什么会有网络协议举个例子,就比如我们如何让一台计算机知道我们想做的事,那我们就得告诉它一种它能明白的语言(尽管这种语言还是接近人类语言,机器不能读懂,需要进行翻译,这种工作交给编译器就好了),这种语言应包含三个方面:1、语法:一段内容要符合一定的规则和格式,比如括号要成对等。2、语义:一段内容必须包含一段含义3、顺序:一段内容先干啥,后干啥这样,计算机就能明白你的意思,并做相应的操作。...

2020-03-02 19:55:36 239

原创 c++泛型编程(二)运算符重载

为什么要运算符重载c++预先定义的运算符操作都基于基本运算符操作,而用户自定义数据类型也希望有这样的操作,这时就需要进行运算符重载,这也是c++的扩展性。运算符重载时通过运算符重载函数来实现的结构(<返回类型说明>)operator(运算符重载符号)(<参数列表>){函数体}运算符重载需要遵循的规则1,、除了类属关系符“.”、成员指针运算符“.*”、作用域...

2020-02-23 14:29:10 794

原创 c++泛型编程(一)模板

什么是模板1、模板是c++的一种特性,允许类或者函数可以泛型形式运行2、模板可以使类或者函数在不同类型下运行,无需为每一种类型都编写代码3、模板是一种复用的手段什么是函数模板函数模板是建立一个通用的函数,他的形参、返回类型和局部变量都用一个占位符来表示,等到真正调用时,根据传入的参数逆推出真正的类型。什么是类模板c++不仅支持函数模板,也支持类模板。函数模板不仅可以用在函数声明中,也...

2020-02-19 15:38:26 138

原创 LeetCode 166:分数到小数

题目传送门给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。示例 1:输入: numerator = 1, denominator = 2输出: “0.5”示例 2:输入: numerator = 2, denominator = 1输出: “2”示例 3:输入: num...

2019-12-06 17:45:11 123

原创 leetcode138:复制带随机指针的链表

题目传送门**给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。示例:输入:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"1","next":{"id”:“2”,“next”:null,“random”:{“KaTeX parse err...

2019-12-06 17:08:03 107

原创 leetcode 136:只出现一次的数字(| ||)

题目传送门给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了两次。找出那个只出现了一次的元素。思路一:异或a⊕0=a;a⊕a=0a⊕b⊕a=(a⊕a)⊕b=b遍历数字,最后 的结果就是出现只出现一次的数。class Solution {public: int singleNumber(vector<int>& nums) { ...

2019-12-06 15:54:12 114

原创 leetcode 49:字母异位词分组

题目传送门给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。思路:map<string,v...

2019-12-04 18:56:30 101

原创 leetcode 36:有效的数独

题目传送门判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入:[[“5”,“3”,".",".",“7”,"....

2019-12-04 18:16:28 102

原创 leetcode 18:四数之和

题目传送门给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合...

2019-12-04 10:43:36 122

原创 leetcode 3:无重复字符的最长子串

题目传送门给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “...

2019-12-03 23:51:32 152

原创 LeetCode15:LeetCode 15 3Sum(c++)

class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { int l=0; vector<vector<int>> vc; sort(nums.begin(),nu...

2019-12-03 08:57:22 133

原创 LeetCode 81搜索旋转排序数组 II

题目传送门假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 2:输入: nums = ...

2019-11-30 11:17:03 175

原创 关于二分查找LeetCode刷题总结(上)

首先来谈一下二分查找的模板问题。一般会出现一下三种错误:1、数组越界。2、死循环3、跳过查询的元素下标。先来看几组常见容易出错的模板。int low=0,high=n;while(low<high){int mid=low+(high-low)/2;if(…)low=mid;elsehigh=mid;}这种情况下,如果在[2,2]中找值为3的下标,那么每次都会...

2019-11-24 22:55:11 231

原创 每日一道算法题:LeetCode33 搜索旋转排序数组

题目传送门**假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。O(logn)就说明直接遍历查找就不起作用了。思路:通过观...

2019-11-22 22:37:58 104

原创 每日一道算法题:高楼扔鸡蛋问题(动态规划问题)

题目是这样:你面前有一栋从 1 到N共N层的楼,然后给你K个鸡蛋(K至少为 1)。现在确定这栋楼存在楼层0 <= F <= N,在这层楼将鸡蛋扔下去,鸡蛋恰好没摔碎(高于F的楼层都会碎,低于F的楼层都不会碎)。现在问你,最坏情况下,你至少要扔几次鸡蛋,才能确定这个楼层F呢?首先我们来看一下,什么叫做最坏情况下,至少要仍几次鸡蛋,才能确定这个楼层F?我们来举个简单的例子,当鸡蛋为1个...

2019-11-18 10:35:40 2491 2

原创 c++ 表达式求值

引言:现实生活中,我们使用的表达式为中缀表达式,但这对于计算机来说却是无法理解的,而计算机却能理解前缀表达式和后缀表达式。前缀表达式表示:<操作符><操作数><操作数>,例如+AB;中缀表达式表示:<操作数><操作符><操作数>,例如A+B;后缀表示式表示:<操作数><操作数><操作符&gt...

2019-11-13 15:27:24 2202

原创 51nod 1413 权势二进制

题目传送门巧妙思路:求n中所有位数上最大的一个数,原因是所有权势二进制数都由0、1组成比如说9998,那么要想得到最高位的9,肯定需要9个1xxx相加。#include<iostream>#include<algorithm>using namespace std;int main(){ int n; cin >> n; int ans =0...

2019-11-13 09:51:29 81

原创 用双向链表实现LRU算法(c++)

实现LRU算法的方式有两种:数组和单链表。讲讲我为什么要用链表模拟实现。其实我们知道,cpu从外存取数据到内存是以块为基本单位的,也就是说cpu取一块连续的地址到内存内,这样说的话是不是对数组友好点?因为数组用连续的地址存储着相同类型的数据。但是在我考虑在实际应用中,如果需要分配的地址过大时,可能会由于各种原理(存储空间有限或者空间碎片化)无法分配一块连续的地址给数组,而且在频繁的插入删除操作面...

2019-11-11 09:58:41 748

原创 关于数组越界问题小结

数组是一种线性数据结构,具有连续的内存,用来存储具有相同类型的数据一、关于数组和链表的比较。-------数组适合查找,时间复杂度为O(1),链表适合插入删除,时间复杂度是O(1)这句话其实是不对的,即使是拍好序的数据,查找的时间复杂度也是O(logn),应该说数组支持随机访问,根据下标访问的时间复杂度是O(1)。二、关于数组越界问题。#include<stdio.h>i...

2019-11-06 10:46:29 529

原创 关于为什么要学习数据结构与算法的再思考以及对时间空间复杂度的分析

一、我理解的数据结构和算法什么是数据结构,什么是算法?从广义上来讲数据结构就是指一组数据的存储结构,而算法则操作数据的一组方法。为什么市面上的书籍都是将数据结构和算法放在一起讲?数据结构是为算法服务的,算法是要作用在特定的数据结构上。数据结构是静态的,他只是数据组织的一种方式,如果不在它的基础上构建和使用算法,孤立的数据结构是没有任何作用的。因此数据结构与算法是相辅相成的,我们无法孤立数据...

2019-11-03 16:14:45 292

原创 力扣刷题日志:42 接雨水

题目传送门思路总结:如何想到使用栈:能存储雨水的条件是存在两个有高度的柱子,并且存在一定的距离。如何确定两个柱子之间的积水量,可以类比括号匹配,当存在左右括号,计算两个括号之间的积水。步骤:1.创建一个栈用来保存柱子的位置(从0开始),也就是vector的下标。2.先将第一个柱子的下标入栈,开始匹配。3.当栈不为空时,并且存在一个柱子高于栈顶柱子的高度时(之前的墙的高度低于目前墙高度,...

2019-09-18 10:59:04 105

原创 力扣刷题日记:20 有效的括号

题目传送门思路:要知道字符串中的括号是否匹配,用栈的先进后出特性再合适不过了,遇到左括号压入栈中,遇到右括号时将栈顶元素弹出栈,栈顶元素也就是需要和右括号进行匹配的左括号,如果匹配成功则继续向下进行匹配,在匹配不成功的情况,可直接返回false提前结束程序。map<char,char> m={{'(',')'},{'{','}'},{'[',']'}};class Solutio...

2019-09-10 15:27:10 123

原创 51nod 1906 字段统计

给定一个字符串S,只由k种小写字母组成。现在给定一个长度L,要求统计一下S有多少种不同的长度为L的子段(S中连续的几个字符)。收起输入单组测试数据。第一行两个整数L和k。(L>=1,1<=k<=26,kL<=2*107)第二行一个字符串S。(1<=|S|<=1000000)输出输出一个整数表示答案。输入样例1 2ababab输出样例2解...

2019-07-03 18:03:55 248

原创 51nod 2489 小b和灯泡

小b有n个关闭的灯泡,编号为1…n。小b会进行n轮操作,第i轮她会将编号为i的倍数的灯泡的开关状态取反,即开变成关,关变成开。求n轮操作后,有多少灯泡是亮着的。收起输入输入一个数字表示灯泡数n,其中1<n≤10000000输出输出一个数字表示最终亮着的灯泡数输入样例3输出样例1思路:求亮着的灯泡数是在求1~n中每个数因子的个数,打表后会发现当i为奇数或sqrt(i)不是整数...

2019-06-30 23:41:53 156

原创 51nod 1413 权势二进制

题目传送门巧妙思路:求n中所有位数上最大的一个数,原因是所有权势二进制都由0、1组成比如说9998,那么要想得到最高位的9,肯定需要9个1xxx相加。#include<iostream>#include<algorithm>using namespace std;int main(){ int n; cin >> n; int ans =0;...

2019-06-30 10:17:06 83

原创 关于贪心算法之活动安排问题的理解

问题一:有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动?求一个教室能安排几个活动,那么就是说用一个教室去选择最多的活动,那么最优的方法肯定就是选择的活动都能不重叠的按次序开始,也就是说每个活动的结束那么恰好在最短的等待时间内有一个活动开始,但如何选择?能否按照开始时间进行选择,先选择开始时间最早的一个活动,结束后选择等待时间开始最早...

2019-06-28 10:27:40 892

原创 51nod 1770 数数字

输入样例23 3 9 103 3 0 10输出样例100思路总结:n个a乘以b,总结起来一共有三种情况:a×b没有进位,结果所有的位数一致(a×b<10)a×b有进位,且进位和下一位乘积相加也有进位((a×b<10)&&(a×b)%10+(a×b)/10>=10)。a乘b有进位,但进位和下一位乘积相加没有进位((a×b<10)&...

2019-06-22 17:13:58 88

原创 51nod 1279 扔盘子(单调栈)

有一口井,井的高度为N,每隔1个单位它的宽度有变化。现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去)。盘子有几种命运:1、掉到井底。2、被卡住。3、落到别的盘子上方。盘子的高度也是单位高度。给定井的宽度和每个盘子的宽度,求最终落到井内的盘子数量。如图井和盘子信息如下:井:5 6 4 3 6 2 3盘子:2 3 5 2 4最终有4个盘子落...

2019-06-19 10:17:05 162

原创 51nod 1138 连续整数的和

给出一个正整数N,将N写为若干个连续数字和的形式(长度 >= 2)。例如N = 15,可以写为1 + 2 + 3 + 4 + 5,也可以写为4 + 5 + 6,或7 + 8。如果不能写为若干个连续整数的和,则输出No Solution。收起输入输入1个数N(3 <= N <= 10^9)。输出输出连续整数中的第1个数,如果有多个按照递增序排列,如果不能分解为若干个连续整...

2019-06-18 21:47:21 131

原创 51nod1266 蚂蚁(c++)

n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,我们知道它距离竿子左端的距离xi,但不知道它当前的朝向。请计算各种情况当中,所有蚂蚁落下竿子所需的最短时间和最长时间。例如:竿子长10cm,3只蚂蚁位置为2 6 7,最短需要4秒(左、右、右),最长需要8秒(右、右、右)。收起输...

2019-06-18 21:29:02 410

原创 字符串的模式匹配-KMP算法(c++)

模式匹配(Pattern Matching) 即子串定位运算(Index函数)。如果之前还不是特别了解KMP算法的整体思想,可以看这篇文章的讲解图解字符串匹配的KMP算法这里重点介绍下KMP的算法实现next数组的含义next[j]=K表示在串p0p1p····pj-1中有相等的前缀子串p0p1p2······pk和后缀子串pj-k-1pj-k········pj-1,这个查找过程其实...

2019-06-18 20:11:45 740

原创 51nod - 1092 回文字符串(c++)

回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。每个字符串都可以通过向中间添加一些字符,使之变为回文字符串。例如:abbc 添加2个字符可以变为 acbbca,也可以添加3个变为 abbcbba。方案1只需要添加2个字符,是所有方案中添加字符数量最少的。收起输入输入一个字符串Str,Str的长度 <= 1000。输出输出最少添加多少个字符可以使之变为回文...

2019-06-11 17:39:42 262

原创 动态规划篇——最长公共子序列(c++)

引言:最长公共子序列属于动态规划的基础篇,由字符串的最长公共最序列可以引出很多的问题。最长子序列详细讲解以及练习题目需要详细讲解教程的可以观看上面链接的文章,以下是自己做的简单的概括。一、何为最长公共子序列A和B的公共子序列中长度最长的(包含元素最多的)叫做A和B的公共子序列。仍然用序列1,3,5,4,2,6,8,7和序列1,4,8,6,7,5它们的最长公共子序列是:1,4,8,7...

2019-06-11 17:28:51 14586

原创 51nod1095 Anigram单词(c++)

一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的Anigram,例如单词army和mary互为Anigram。另:相同的2个单词不算Anigram。现在给定一个字典,输入Q个单词,从给出的字典中找出这些单词的Anigram。收起输入第1行:1个数N,表示字典中单词的数量。(1 <= N <= 10000)第2 - N + 1行,字典中的单词,单词长度...

2019-06-09 11:15:30 348

原创 51nod 1119 机器人走方格V2

M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。收起输入第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000000)输出输出走法的数量 Mod 10^9 + 7。输入样例2 3输出样例3题目传送门刚开始考虑从左上角走到右下角每走一步下一步共有两种选...

2019-06-05 22:31:31 143

原创 51nod 骨牌覆盖(c++实现)

在2N的一个长方形方格中,用一个12的骨牌排满方格。问有多少种不同的排列方法。例如:2 * 3的方格,共有3种不同的排法。(由于方案的数量巨大,只输出 Mod 10^9 + 7 的结果)输入输入N(N <= 1000)输出输出数量 Mod 10^9 + 7输入样例3输出样例3思路总结:考虑在2N的长方形中,用12的骨牌铺满方格,首先考虑N=1,只有竖着放一种方式f(1...

2019-06-04 12:52:18 905

空空如也

空空如也

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

TA关注的人

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