
C/C++
玉米味土豆片
在路上
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
模式串匹配:KMP算法和AC自动机(一)
模式串匹配也称字符串匹配,是在计算机中用得非常多的一种操作。这篇博客主要记录两种常见的字符串匹配算法的学习历程,它们分别是KMP算法和AC自动机。其中KMP是迄今为止用得最为广泛并且算法效率极高的一种单模式串匹配的算法,相比朴素字符串匹配算法O(n*m)的时间复杂度(其中n为主串的长度,m为模式串的长度),KMP的时间复杂度只有O(n+m),在主串长度远大于模式串的长度时,KMP的效率是相当优秀的...原创 2018-10-05 23:17:45 · 832 阅读 · 0 评论 -
二叉树前中后序遍历非递归实现C++
前几天面试过程中面试官让手写一下二叉树后序遍历的非递归写法,当时没有写出来,本想着可能是因为面试太紧张的原因,才这么简单的题都没写出来,后来特地去研究了一下,发现二叉树的后序遍历非递归实现还真的没我想的那么简单,在此写个博客记录一下,顺便把前序和中序的非递归实现也写出来。后序遍历非递归实现#include <iostream>#include <stack>usi...原创 2019-09-30 23:57:08 · 922 阅读 · 1 评论 -
深度分析mmap:是什么 为什么 怎么用 性能总结
目录mmap基础概念mmap内存映射原理mmap和常规文件操作的区别mmap优...转载 2019-09-12 16:52:36 · 563 阅读 · 0 评论 -
UDP数据包的延迟及丢包检测(C++)
摘要本文记录通过数据报套接字来检测UDP数据包的延迟和丢包的思路和简单的代码实现。思路UDP协议及用户数据报协议在传输层提供了无连接、不可靠的传输服务,端到端的延迟以及丢包率是反应当前网络环境好坏的重要评价标准。Ping检测延迟的方式是:发送端发送一个ICMP包给接收端,接收端接收到ICMP包之后向发送端回应一个包,发送端可以计算出往返时间(RTT),本文通过套接字使用类似于Ping的思路来...原创 2019-08-31 23:06:54 · 7830 阅读 · 1 评论 -
Socket网络编程(二):主要API调用方法
Socket主要API调用方法windows下socket的API和linux下的API大致相同,只是在某些细节上有些细微的差别。包含头文件和初始化Linux socket常用头文件<sys/socket.h> //与套接字相关的函数声明和结构体定义,如socket()、bind()、connect()及struct sockaddr的定义等<s...原创 2019-08-29 17:16:46 · 722 阅读 · 0 评论 -
Makefile经典教程
该篇文章为转载,是对原作者系列文章的总汇加上标注。支持原创,请移步陈浩大神博客:http://blog.youkuaiyun.com/haoel/article/details/2886makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和p...转载 2019-06-10 15:35:57 · 253 阅读 · 0 评论 -
leetcode相交链表:O(n)时间复杂度,O(1)空间复杂度解法
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 ...原创 2019-05-27 11:26:52 · 1182 阅读 · 0 评论 -
leetcode岛屿的个数:广度优先搜索(BFS)
题目: 岛屿的个数给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。解体思路:这是一道标准的广度优先搜索题,可以尝试用递归的方法或者非递归的方法。比较重要的一点就是要进行边界检查:因为网格是给定的,所以在BFS过程中要保证每个节点都是有效没有越界的。...原创 2018-12-31 23:01:07 · 2671 阅读 · 0 评论 -
leetcode验证二叉搜索树
题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。这是leetcode里面我遇到的一道比较有意思的题目,题目的意思非常清楚:输入一棵树,判断它是不是二叉搜索树。大家对二叉搜索树的概念应该非常熟悉,题目中也非常清楚地给出了判...原创 2018-12-15 00:07:31 · 1191 阅读 · 1 评论 -
C/C++ 位运算技巧和总结
本篇博客转载于https://blog.youkuaiyun.com/IOT_SONG/article/details/51477071https://blog.youkuaiyun.com/qq_33775402/article/details/79561005基本位运算常用技巧按位与 &快速清零int a=0x0001;a&=0; //a : 0x0000保留指定...转载 2018-11-18 11:15:51 · 549 阅读 · 0 评论 -
筛法快速求素数——leetcode计数质数
在算法竞赛中经常会遇到求质数的问题,这种题目一般都是要求出一定范围内[0,n]所有的质数或者质数的个数。最直接的思路就是根据质数的定义来判定一个数是不是质数(即一个数不能被除1和它本身外的任何数整除),如果我们需要对所有的数都这样进行判断,那么当n非常非常大的时候,这种算法的时间开销就会非常大,大概为O(n^2)。这个时候就可以使用筛法来快速地求出素数,筛法求素数的基本思路就是:除了0、1之外,所...原创 2018-11-17 20:04:16 · 1088 阅读 · 1 评论 -
模式串匹配:KMP算法和AC自动机(二)
博客《模式串匹配:KMP算法和AC自动机(二)》中讲了KMP原理和实现,KMP算法针对的是单模式串的匹配问题,而AC自动机是能够解决多模式穿匹配问题的算法,曾尝试自己实现一个AC自动机,但是发现还是挺有难度的,于是在网上看了一些大神的模板,在这里转发学习一下~下面的博客转自:KMP 大多 是用来解决 单串单串匹配 的 问题的~AC自动机 则是在 KMP 的 基础上 用来解决一大串里面的...转载 2018-11-05 21:14:53 · 426 阅读 · 0 评论 -
leetcode打家劫舍:动态规划(三)
博客《leetcode——动态规划(一):最大子序和》已经结合题目把动态规划的思想原理大概讲了一下,那么这篇博客主要针对更多典型的动态规划的题目,来对动态规划思想的应用进行更进一步的探讨。《leetcode——动态规划(二):爬楼梯》讨论了一道非常简单的题,这篇博客又要讲leetcode上另一道非常简单的题目:打家劫舍。打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现...原创 2018-11-05 20:57:21 · 334 阅读 · 0 评论 -
leetcode爬楼梯:动态规划(二)
博客《leetcode——动态规划(一):最大子序和》已经结合题目把动态规划的思想原理大概讲了一下,那么这篇博客主要针对更多典型的动态规划的题目,来对动态规划思想的应用进行更进一步的探讨。这篇博客主要讲leetcode上一道非常简单的题目:爬楼梯。爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n...原创 2018-11-05 20:46:10 · 159 阅读 · 0 评论 -
leetcode最大子序和:动态规划(一)
动态规划是一种非常重要的算法思想,毕竟是一种思想,所以在逻辑层面的体现并没有一个固定的形式,但是处理问题的方式却都是本着一个原则:将一个问题递归分解为它的子问题进行求解,也许有人会问:这不是分治的思想嘛?因为问题分解的过程中往往会产生很多重复的子问题,这个时候动态规划和分支的区别就会体现出来,动态规划会将需要重复解决的子问题的结果在第一次计算之后就保存起来,之后碰到重复的子问题都可以直接得到结果,...原创 2018-11-05 20:20:19 · 203 阅读 · 0 评论 -
linux系统进程的内存布局
文章转自:https://www.cnblogs.com/diegodu/p/4552490.html内存管理模块是操作系统的心脏;它对应用程序和系统管理非常重要。今后的几篇文章中,我将着眼于实际的内存问题,但也不避讳其中的技术内幕。由于不少概念是通用的,所以文中大部分例子取自32位x86平台的Linux和Windows系统。本系列第一篇文章讲述应用程序的内存布局。 在多任务操作系统中...转载 2018-10-10 22:12:44 · 181 阅读 · 0 评论 -
mem系列函数使用总结
mem系列函数是我们在平时写C++的过程中经常会用到的函数,现在写一篇博客来总结一下它们的用法。mem系列函数主要是用来操作内存,使用这些函数需要在源文件中包含头文件cstring。 memset 函数原型:void *memset(void*s ,int ch,size_t n);函数描述:将内存地址s处的n个字节的每个字节都替换为ch,并返回s。memset函数经常用来...原创 2018-10-10 16:52:02 · 3023 阅读 · 0 评论 -
二叉查找树(C++实现)
其实所谓的二叉搜索树、二叉查找树、二叉排序树都是同一种东西,顾名思义Binary Search Tree是一种有利于查找数据的数据结构。其实在实际场景中用得最多的是红黑树,也是一种特殊的二叉平衡树;而二叉平衡树又是一种特殊的二叉查找树,也就是说,二叉查找树是一种范围很大的二叉树类别。当在二叉查找树中查找元素的时候,BSTree从根节点出发,通过比较查找目标与当前节点的数值,判断下一步...原创 2018-05-02 15:27:21 · 340 阅读 · 0 评论 -
C++11右值引用和移动语义
C++11中加入了很多新特性,其中非常有用的一个就是右值引用和移动语义,移动语义主要体现在移动构造函数和移动赋值函数。原创 2019-09-30 23:59:40 · 289 阅读 · 0 评论