自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zw_ss

技术博客

  • 博客(92)
  • 资源 (3)
  • 收藏
  • 关注

原创 Linux:线程安全

什么是线程安全?当我们多线程对临界资源,或者全局变量静态变量,(多线程执行流共享的资源)进行操作时,容易造成的问题。因为在cpu足够的情况下,多个线程的运行也可能是并行的,因此对临界资源的访问,就会造成争抢操作,然而这种争抢操作,会造成数据的二义性问题,因此线程安全,就是讨论如何保证线程对临界资源的安全访问。解决线程安全问题的方法同步与互斥操作,同步就是对临界资源访问的时序可控性,互...

2019-01-26 16:59:46 924

原创 Linux:多线程概念

线程的概念1.什么是线程?线程是cpu进行调度的基本单位,简单的来说,线程就是进程里面的进程,不过线程共享了进程的虚拟地址空间,而且公用了进程的代码段和数据段,线程是进程里面的一个执行流(cpu调度的基本单位是线程,线程是真正执行一段程序的执行单位),所以有的人说线程是运行在进程上面的。2.进程和线程的区别(1)进程是资源竞争的基本单位(2)线程是cpu运行调度的基本单位(3)线程...

2019-01-22 17:24:29 381

原创 (剑指offer)求二进制中1的个数(C++)

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:通过题目描述,我们首先对题目的要求进行分析,首先我们考虑位运算的右移,然后与1相与,但是我们要考虑到当系统给的数字为负数时,单纯的采用右移的方式,会出现错误,因为负数的右移最高位补位会补1所以肯定会出现错误。所以我们采取不同的方法,定义一个flag=1,对flag进行左移,然后与该数相与,当结果为1的时候count++...

2018-12-02 11:53:54 721

原创 (牛客)第一个只出现一次的字符(c++)

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).解题思路:1.利用C++的map形成键值对,每一个字符对应一个相应的键值对,遍历字符串,当出现了一个字符串时,对他相应的键值对++,然后依据字符串的顺序进行查找,当出现第一个值为1的字符,就是第一个只出现一次的字符。2.利用has...

2018-12-02 11:45:15 1445

原创 简单理解RAII(C++)

1.什么是RAII?RAII即"资源获取即初始化" 他是一种方法,定义一个类来封装资源的分配和释放,在类的构造函数中来实现资源的分配和初始化,在类的析构函数中实现资源的释放和清理,是C++中一种管理资源,避免资源泄漏的方法。因为在C++中任何类构造的对象最终都会调用析构函数销毁。2.RAII的分类RAII对资源分配的所有权可分为常性类型和变性类型,代表为boost:shared_ptr&lt...

2018-11-17 16:25:33 2140

原创 leetcode:654最大二叉树(C++)

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:1.二叉树的根是数组中的最大元素。2.左子树是通过数组中最大值左边部分构造出的最大二叉树。3.右子树是通过数组中最大值右边部分构造出的最大二叉树。4.通过给定的数组构建最大二叉树,并且输出这个树的根节点。例如:思路:我们先找到数组里面的最大数,把他设置为根节点,然后递归传入最大数的左边的数组,然后继续找最大的数,...

2018-11-13 14:47:53 1182

原创 leetcode118杨辉三角(C++)

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]class Solution {public: vector<vector<int>> generate(int numRows) {...

2018-11-12 21:21:45 316

原创 leetcode:98. 验证二叉搜索树(C++)

给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: f...

2018-11-11 12:08:38 1260 1

原创 leetcode:459重复的字符串(C++)

题目描述:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: "abab"输出: True解释: 可由子字符串 "ab" 重复两次构成。示例 2:输入: "aba"输出: False示例 3:

2018-11-10 17:58:45 481

原创 利用消息队列实现简单聊天程序

本篇利用消息队列的特性实现简单的聊天程序,msgsnd发送数据,msgrcv接收数据来实现聊天功能,消息队列详情。数据接收端msgrcv//这是一个以system V消息队列实现的聊天程序客户端//// 1.创建消息队列//// 2.从消息队列中获取一个数据,打印出来//// 3.从标准输入中获取一个数据,组织成消息队列节点发送//// 4.删除消息队列//// 接...

2018-11-10 15:48:29 5630

原创 利用管道实现进程间的单向通信

管道是进程间通信的最原始方式,今天我们利用管道的进程间通信,来实现简单的进程间单向通信首先我们需要了解命名管道的一些特性命名管道的使用与创建然后创建一个fifo_c的文件来实现输入数据和发送数据 /*这是一个命名管道的实现,往命名管道中写入数据,并且发送给另一个进程 * 1. 创建一个命名管道 * int mkfifo(const char*pathname,m...

2018-11-10 10:52:12 750

原创 进程间通信(二)命名管道fifo

命名管道:管道的一个限制就是只能用在亲缘进程之间,如果我们想在不相关的进程间进行数据交换,可以使用FIFO文件来进行,它叫做命名管道。命名管道:文件系统可见,是一个特殊类型(管道类型)的文件。命名管道可以应用在同一主机的任意进程间通信。命名管道的创建:(1)在命令行的创建$ mkfifo filename;(2)在程序里创建int mkfifo(const char*filen...

2018-11-10 10:15:42 391

原创 leetcode:26. 删除排序数组中的重复项(C++)

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。函数应该返回新的长度 5, 并且...

2018-11-08 20:58:20 323

原创 Leetcode:395至少有K个重复字符的最长子串(C++)

找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。示例 1:输入:s = "aaabb", k = 3输出:3最长子串为 "aaa" ,其中 'a' 重复了 3 次。示例 2:输入:s = "ababbc", k = 2输出:5最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了...

2018-11-08 19:43:59 628

原创 leetcode:541反转字符串

给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s = “abcdefg”, k = 2输出: “bacdfeg”要求:该字符串只包含小写的英文字母。给定字符串的长度和 k 在[1, 10000...

2018-11-07 15:34:24 128

原创 leetcode:k个一组翻转链表

题目说明:给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2-...

2018-10-29 17:56:39 358

原创 leetcode:925长按键入

题目:你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。示例一:输入:name = "alex", typed = "aaleex"输出:true解释:'alex' 中的 'a' 和 'e' 被长按。...

2018-10-29 17:20:48 312

原创 Leetcode:分隔链表

题目:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5/** * Definition for singly-l...

2018-10-21 23:30:04 128

原创 Leetcode—328奇偶链表

题目说明:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5-&...

2018-10-19 19:36:07 293

原创 Linux:进程优先级

什么是进程优先级?1.cpu分配资源的先后顺序,就是指进程的优先权2.优先级高的进程有优先执行的权利。配置进程优先权对多任务环境的Linux很有用,可以改善系统的性能3.可以把进程绑定到指定的cpu上,这样可以把不重要的进程安排到别的cpu上,可以改善系统的整体性能(不用在多个核心上切换提高效率)交互式进程和批处理进程1.交互式进程:一旦操作立即反应,优先级高(人性化体验)2.批处理...

2018-10-17 16:38:29 895

原创 Linux:进程状态

为了弄明白正在运行的进程什么意思,我们需要知道进程不同的状态,一个进程可以有几个状态1.运行态(running):并不意味着进程一定在运行中,他表明进程要么在运行要么在运行队列里2.可中断睡眠状态(sleeping):意味着进程在等待事件完成3.不可中断睡眠状态(disk sleep):在这个状态的进程会等待IO的结束4.停止状态(stopped):可以通过发送SIGSTOP信号给进程来...

2018-10-16 21:07:24 1429

原创 Leetcode:876链表的中间节点

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.v...

2018-10-15 21:25:38 523

原创 Leetcode:203 移除链表元素

删除链表中等于给定值 val 的所有节点。示例:输入:1->2->6->3->4->5->6, val = 6输出:1->2->3->4->5这个问题大多数情况我们都可以考虑到,但是有的情况不容易想到,例如:1—>NULL, val = 1当删除1后,链表为空,所以我们需要在链表的头...

2018-10-15 21:11:04 273

原创 模拟实现Vector

Vector模拟实现,具体的Vector描述请查看https://blog.csdn.net/weixin_40853073/article/details/81413281#include<iostream>#include<stdio.h>#include<assert.h>using namespace std;#pragma once typ...

2018-10-14 23:09:49 207

原创 牛客网:判断两棵树是否相同

给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 ...

2018-10-12 14:54:12 414

原创 leetcode:557 反转字符串的单词

题目来源:leetcode题目描述:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。例如:输入: “Let’s take LeetCode contest”输出: “s’teL ekat edoCteeL tsetnoc”这道题的测试用例很长,一般的两个循环式跑不过的,以下是其中一部分测试用例,后面还有很长![在这里插入图片描述...

2018-10-03 12:27:49 219

原创 进程间通信(三)共享内存

概念:共享内存区是最快的IPC形式。⼀一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再 涉及到内核,换句话说是进程不再通过执⾏行进⼊入内核的系统调⽤用来传递彼此的数据。共享内存中的函数:shmget函数:功能:⽤用来创建共享内存 原型 int shmget(key_t key, size_t size, int shmflg); 参数 key:这个共享...

2018-10-02 13:13:41 414

原创 剑指offer:递归和非递归实现

题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39什么是斐波那契数列斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、2...

2018-09-28 21:04:50 167

原创 进程间通信(三)消息队列

什么是消息队列 1)消息队列提供了一个进程向另外一个进程发送一块数据的方法。 2)每个数据块都认为有一个类型,接收者进程接收的数据块可以有不同的类型。 3)消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的,每个消息队列的总字节数也是有上限的,系统上消息队列的总数也有一个上限。消息队列函数 1)msgget函数功能:用来创建一个消息队列原型: int ms...

2018-09-26 16:47:21 351

原创 LeetCode:二叉树减枝(C++)

题目:给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)示例1:输入: [1,null,0,0,1]输出: [1,null,0,null,1]解释:只有红色节点满足条件“所有不包含 1 的子树”。右图为返回的答案。说明:给定的二叉树最多有 1...

2018-09-21 17:28:53 373

原创 C++:类继承——赋值兼容规则(切片)

赋值兼容规则—public继承 1)子类对象可以为父类对象赋值(切片) 2)父类对象不能赋值给子类对象 3)父类的指针引用可以指向子类对象 4)子类的指针引用不能指向父类对象(可以通过强制类型转换完成,但是不能调用成员函数,会崩溃)...

2018-09-20 00:07:18 455

原创 带参数的main

在我们通常使用的main函数中,一般是不带参数的,但是其实main函数也是可以带参数的,main函数中允许带两个参数,一个是 ( int argc ) 另一个是 (char * argv[] )如下:int main(int argc ,char *argv[])这两个参数的做用分别是:argc指命令行输入参数的个数,argv存储了所有的命令行参数,例如写一个hello.exe ,并运行该...

2018-09-19 20:06:39 3095

原创 Leetcode:删除链表中的节点

请编写一个函数,使其可以删除链表中的非尾节点,你将只被给定你要删除的节点,例:现在有一个链表——head=[4 ,5,1,9]删除5这个节点原4->5->1->9->NULL删除后4->1->9->NULL说明:1.链表至少包含两个节点2.链表中所有的节点都是唯一的3.给定的节点是一个非尾节点并且一定是链表中的一个有效节点4.不要从你的...

2018-09-18 10:33:21 350

原创 剑指offer:翻转二叉树

题目描述:操作给定的二叉树,将其变换为源二叉树的镜像二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / ...

2018-09-17 15:40:35 144

原创 leetcode:用栈模拟队列

题目:使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。 示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1qu...

2018-09-16 20:39:09 696

原创 Leetcode:宝石与石头

题目描述:给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。 J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此”a”和”A”是不同类型的石头。 示例 1:输入: J = "aA", S = "aAAbbbb"输出: 3示例 2:输入: J = "z",...

2018-09-16 19:31:09 164

原创 模拟实现字符串操作

#include<stdio.h>#include<assert.h>#include<windows.h>int my_strstr(char*arr1, char*arr2)//字符串查找{ assert(arr1&&arr2); int len1 = strlen(arr1); int len2 = str...

2018-09-11 21:42:11 133

原创 算法:寻找和为定值的两个数

题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。解答: 创建一个新的数组,把num-arr1[i]的每一项值存入该数组,然后遍历,因为arr1是有序的,所以arr2也是有序的,从arr2...

2018-09-10 18:50:00 681 1

原创 C++:类继承(一)

继承的概念 继承机制是面向对象程序设计是代码复用的重要手段,它允许程序员在保持类原有特性基础下,进行扩展增加功能。这样产生新的类,称为派生类,继承体现了面向对象设计的层次结构,体现了由简单到复杂的认知过程。继承的三种形式 1)公有继承——public:基类的公有变为派生类的公有,基类的保护变为派生类的保护,私有派生类不可访问 2)私有继承——private:基类的公有变为派生类的私有,基...

2018-09-07 12:34:20 7751 1

原创 win10装win7虚拟机教程

现在许多电脑的操作系统都是win10系统,但有的时候还是需要用到win7系统,这时装一个win7的虚拟机就会特别方便。 装win7的虚拟机首先你得有两个条件: 1.一个完整的可以使用的WMware 2.一个靠谱的win7操作系统iso 当你具备了这两个条件,你才能具备成功的条件。 我装win7的虚拟机的时候就是因为没有一个靠谱的win7iso光盘映像,所以装机装不上。第一步创建虚拟...

2018-09-05 17:44:38 72864 2

jsoncpp-0.10.7.rar

vs2015编译好的json库,通过环境配置即可使用

2020-05-03

opencv4.2_2.rar

编译完毕的opencv4.2,不用再次编译,vs2015环境下没问题,需要通过简单的opencv环境配置即可使用

2020-05-02

百度Ocrlib.rar

VS2015百度OCR前置库文件,首先按百度OCR的说明文档把C++的SDK下载到本地,然后把libcurl, openssl, jsoncpp这三个库加上即可

2020-05-02

空空如也

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

TA关注的人

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