- 博客(235)
- 资源 (5)
- 收藏
- 关注
原创 28_SymmetricalBinaryTree判定二叉树镜像
判定一棵二叉树是否是镜像的方法一是采用递归的方法判定左右子树是否镜像值相等/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {p
2022-05-27 07:12:04
117
原创 26_SubstructureInTree
输入两棵二叉树A和B,判断B是不是A的子结构。(空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:3/ \4 5/ \1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。/** * Definition for a binary tree node. * struct TreeNode { * int val...
2022-05-24 08:01:23
111
原创 11_MinNumberInRotatedArray旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。示例 1:
2022-04-17 21:03:10
303
原创 vs code中c++编译的配置
launch.json{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "co
2021-11-10 22:48:15
505
原创 34_PathInTree二叉树中和为某一值的路径
题目描述:二叉树中和为某一值的路径------输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。......
2021-04-09 23:10:07
125
原创 leetcode-7. Reverse Integer
7.Reverse IntegerGiven a signed 32-bit integerx, returnxwith its digits reversed. If reversingxcauses the value to go outside the signed 32-bit integer range[-231, 231- 1], then return0.Assume the environment does not allow you to store 64-bit...
2021-02-14 17:24:55
214
原创 leettcode-27. Remove Element
题目描述给出四堆石子,石子数分别为a,b,c,d。规定每次只能从堆顶取走石子,问取走所有石子的方案数。输入描述:在一行内读入四个由空格分隔的整数a,b,c,d, 输入均为不超过500的正整数输出描述:输出一个整数表示答案,答案对109+7取模示例1输入复制3 5 4 2输出复制2522520...
2021-02-06 22:54:02
112
原创 字符串压缩
例如:aac 压缩为1ac#include<iostream>using namespace std;int main(){ string str; cin >> str; char pre, now; int len = str.size(); if (len <= 1) { cout << str; return...
2018-09-18 21:47:56
326
原创 观察者模式(Observer)
观察者模式定义了对象间的一对多的依赖关系,让多个观察者对象同时监听某一个主题对象(被观察者)。当主题对象的状态发生更改时,会通知所有观察者,让它们能够自动更新。 动机在软件构建的过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有的以来对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使得软件不能很好的抵御变化。 使用面向...
2018-09-12 15:44:47
215
原创 策略模式(Strategy)
策略模式(Strategy)定义一系列算法,把他们一个个封装起来,并且是他们可以互相替换(变化)。该模式似的算法可以独立于使用它的客户程序(稳定的)而变化(扩展,子类化)。——《设计模式》GoF上面部分是稳定的,下面是变化的。动机(Motivation)在软件构建的过程中,某些对象使用的算法可能是多种多样的,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有...
2018-09-12 10:48:05
298
原创 模版方法(Template Method)
“组件协作”模式:现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,使二者之间协作时常用的模式。 典型模式 Template Method Strategy Observer / Event Template Method定一个操作中的算法的骨架(稳定的),而将一些步骤延迟(容易变化的)到子类中。Te...
2018-09-12 10:36:56
259
原创 排序问题next_permutation
利用next_permutation能够找出排序的下一个数。next_permutation的思想是从右向左寻找两个相邻的元素,令第一个元素为*i,第二个元素为*ii,且满足*i<*ii。找到这样一组元素后,在从最尾端开始往前查找,找出第一个大于*i的元素,令为*j,将i、j元素对调,在将ii之后的所有元素颠倒排列,即可得到下一次排序。数字两个字符串共有字符的一个规定长度排列#...
2018-09-04 21:14:15
327
原创 Socket编程(1) --TCP/IP简述
ISO的OSI OSI(open system interconnection)开放系统互联模型是由ISO国际标准化组织定义的网络分层模型,共七层, 从下往上为: OSI七层参考模型 物理层(Physical Layer) 物理层定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质,本层中数据传输的单位为比特(bit/二进...
2018-09-01 09:45:35
268
原创 简单线程池实现
目标1.用于执行大量相对短暂的任务2.当任务增加的时候能够动态的增加线程池中线程的数量值到达一个阈值3.当任务执行完毕的时候,能够动态的销毁线程池中的线程4.该线程池的实现本质上也是生产者与消费者模型的应用。生产者线程向任务队列添加任务,一旦队列有任务到来,如果有等待线程就唤醒来执行任务,如果没有等待线程并且线程数没有达到阈值,就创建线程来执行任务。线程池拥有若干个线程,通常情...
2018-08-22 20:20:11
422
原创 Linux多线程--POSIX信号量、互斥锁、读写锁、条件变量
Posix信号量 Posix 信号量 有名信号量 无名信号量 sem_open sem_init sem_close sem_destroy sem_unlink ...
2018-08-22 17:17:46
369
原创 Linux多线程 --线程属性
线程属性初始化/销毁线程属性int pthread_attr_init(pthread_attr_t *attr);int pthread_attr_destroy(pthread_attr_t *attr);获取/设置线程分离属性int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachs...
2018-08-22 14:01:59
316
原创 Linux多线程 --线程基本API
POSIX线程库 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”开头,要使用这些函数库,要通过引入头文<pthread.h>,而且链接这些线程函数库时要使用编译器命令的“-lpthread”选项[Ubuntu系列系统需要添加的是”-pthread”选项而不是”-lpthread”,如Ubuntu 14.04版本] 1.pthread_c...
2018-08-22 11:19:17
1334
1
原创 Linux多线程 --线程理论
线程概念 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列/指令序列”; 一切进程至少有一个执行线程;进程 VS. 线程 1.进程是资源分配(进程需要参与资源的竞争)的基本单位,而线程是处理器调度(程序执行)的最小单位; 2.线程共享进程数据,但也拥有自己的一部分数据,如线程ID、一组寄存器(IP,SP)、...
2018-08-22 10:37:03
199
原创 POSIX共享内存
1. 创建/获取一个共享内存#include <sys/mman.h>#include <sys/stat.h> /* For mode constants */#include <fcntl.h> /* For O_* constants */int shm_open(const char *name, int o...
2018-08-22 10:04:07
630
原创 posix消息队列
posix和System V历史 UNIX两大贡献者贝尔实验室和BSD,在进程之间通信侧重不同,前者基于内核对进程之间的通信手段进行了改进,形成了“System V IPC”,而后者则是基于网络形成了套接字。 而POSIX则是IEEE制定的标准,目的是为运行在不同操作系统上的软件提供统一的接口,实现者则是不同的操作系统内核开发人员。说明 在信...
2018-08-22 09:33:14
333
原创 System V信号量实现生产者消费者
生产者消费者模型 实现一个先进先出的共享内存shmfifo使用消息队列即可实现消息的先进先出(FIFO), 但是使用共享内存实现消息的先进先出则更加快速 shmfifo说明: 将申请到的共享内存作为一块缓冲区, 将该内存的首部(p_shm到p_payload的内容)格式化为如上图所示的形式;读/写进程不断的按照先进先出的原则从其中读出/写入数据, 则读/写进程就...
2018-08-21 20:32:59
662
原创 System V信号量实现进程互斥和解决哲学家就餐问题
父进程打印输出一个o的字样,子进程打印输出x的字样,父进程打印输出o之后睡眠,睡眠一个随机的时间,然后再次输出o,子进程也是同样的动作,只是输出的是x。父子进程执行流程如下: 父进程 子进程 P P O(print) X(print) sleep ...
2018-08-21 16:51:55
436
原创 System V信号量
信号量集数据结构 struct semid_ds { struct ipc_perm sem_perm; //IPC对象数据结构 time_t sem_otime; //最后一次执行semop(PV操作)的时间 time_t sem_ctime; //信号量集状态最后一次改变的时间 unsigned short sem_nsem...
2018-08-21 16:06:01
212
原创 System V共享内存
共享内存数据结构 struct shmid_ds { struct ipc_perm shm_perm; //IPC对象数据结构 size_t shm_segsz; //共享内存段的大小 time_t shm_atime; //最后一次映射共享内存的时间 time_t shm_d...
2018-08-21 15:15:19
251
原创 共享内存
共享内存共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据,只需要通过一些内存访问函数来传递。共享内存示意图共享内存是整块内存当中的一块特殊区域,这块区域可以映射到不同的地址空间。A、B进程就可以通过共享内存区传递数据,并且不涉及系统调用。 管道、消息队列与...
2018-08-21 14:43:48
941
原创 System V消息队列(3)
消息队列实现回射客户/服务器server进程接收时, 指定msgtyp为1, 从队首不断接收消息server进程发送时, 将mtype指定为接收到的client进程的pid client进程发送的时候, mtype指定为自己进程的pidclient进程接收时, 需要将msgtyp指定为自己进程的pid, 只接收消息类型为自己pid的消息;#include <un...
2018-08-21 13:09:38
356
原创 System V消息队列(2)
消息发送/接收APImsgsnd函数int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);参数 msgid: 由msgget函数返回的消息队列标识码, 也可以是通过ipcs命令查询出来的一个已经存在的消息队列的ID号 msgp:是一个指针,指针指向准备发送的消息, msgsz:是m...
2018-08-21 09:51:51
271
原创 System V消息队列(1)
消息队列概述 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法(仅局限于本机); 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值. 消息队列也有管道一样的不足: 每个消息的最长字节数的上限(MSGMAX); 系统中消息队列的总条数也有一个上限(MSGMNI); 每个消息队列所能够保存的总字节数是有上限的(MSGMNB)查看系统...
2018-08-21 09:16:08
321
原创 Linux IPC-概述
顺序程序与并发程序顺序程序特征顺序性 封闭性 确定性(运行结果) 可再现性(指的是运行结果)并发程序特征共享性 并发性 随机性 进程的同步与互斥 进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源, 而在进程中涉及到互斥资...
2018-08-20 22:20:13
632
原创 命名管道
FIFO具名/命名管道 (匿名)管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。 如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道; 命名管道是一种特殊类型的文件. 创建一个命名管道1)命名管道可以从命令行上创建: $ mkfifo filename2)命名管道在程序里创建: ...
2018-08-20 16:23:03
664
原创 匿名管道
管道概念 管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”, 管道的本质是固定大小的内核缓冲区; 如:ps aux | grep httpd | awk '{print $2}' 管道限制 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于具有共同祖先的进程(具有亲缘关系的进程)之...
2018-08-18 15:31:58
982
深度学习 最新完整pdf
2017-11-02
Debug编译操作
2014-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人