自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

NK_test的博客

大部分人愿意做任何事来逃避真正的思考

  • 博客(25)
  • 资源 (2)
  • 问答 (5)
  • 收藏
  • 关注

原创 [leetcode] 80 Remove Duplicates from Sorted Array II(数组下标操作)

因为这道题目的题意是要求我们在原数组上进行操作,所以操作变得稍微复杂了些,否则直接使用map最为简单。基本思想是记录两个指针,一个是当前数组,另一个是目的数组,注意如果发现重复数超过2,那么目的数组的cur就要阻塞,直到不同的出现后再赋值前进。class Solution {public: int removeDuplicates(vector& nums) { i

2015-10-30 22:39:22 4492 4

原创 手把手教你用C++ 写ACM自动刷题神器(冲入HDU首页)

少年,作为苦练ACM,通宵刷题的你 是不是想着有一天能够荣登各大OJ榜首,俯瞰芸芸众生,唔....要做到这件事情可是需要一定天赋的哦!博主本身也搞过一段时间的acm,对刷题深有感触,不信可以去看我博客的acm题解(哈哈)。不过,先给各位辛苦刷题的ACMer赔个不是,毕竟这是很投机的一种方式,仅供娱乐,还请各位见谅!受学长的启蒙,打算自己做一个使用C++语言完成的自动刷题神器,也可以叫自

2015-10-29 22:15:09 15101 13

原创 Linux进程间通信(IPC)编程实践(0) 进程间通信简述和PV原语

进程的同步与互斥   进程同步: 多个进程需要相互配合共同完成一项任务。   进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源, 而在进程中涉及到互斥资源的程序段叫临界区.对于多个进程的并发状态,进程是基于CPU时间片轮转的。

2015-10-28 23:18:59 1989

原创 [leetcode] 120 Triangle

感觉acm做过之后,这种题太基本了....没啥好说的,最简单的动态规划,找出状态转移方程就可以了。采用由下到上的思想(这样最后只需要取出dp[0][0]就是答案),本层每个结点的结果根据下面一行的路基累计和而计算,要么取左边的,要么取右边的,两者取最小的即可。状态转移方程:triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1]

2015-10-27 23:40:09 4582

原创 Linux下的socket编程实践(十) 基本UDP编程细节

在我的这两篇博客中,简单介绍并实现了基于UDP(TCP)的windows(UNIX下流程基本一致)下的服务端和客户端的程序,本文继续探讨关于UDP编程的一些细节。http://blog.csdn.net/nk_test/article/details/47733307http://blog.csdn.net/nk_test/article/details/47756381下图是一个

2015-10-26 23:54:02 3146

转载 Linux 下超级有趣的命令

1. sl 命令sl是指“steam locomotive(蒸汽机车)”,你会看到一辆火车从屏幕右边开往左边。。。。。。安装  $ sudo apt-get install sl 运行  $ sl命令有 -alFe几个选项,-a An accident seems to happen. You'll feel pity for people who cry fo

2015-10-25 20:20:16 6763

原创 [LeetCode]268 Missing Number

很简单,提供两种解法。(1)等差数列先求得总和,然后减去给定的队列,剩下的值就是缺失值。(2)先排个序,逐个比较,不等的直接return第一种的代码:class Solution {public: int missingNumber(vector& nums) { int n = nums.size(); int expect = (n+1

2015-10-25 00:16:48 3440

原创 [leetcode] 279 Perfect Squares(DP,四平方和定理)

1. 四平方和定理定理表明 每个正整数均可表示为4个整数的平方和。也就是说这个题的答案,我们可以先在数组中预处理出平方和,然后两层for循环暴力循环判断1,2,顺便可以由剩下的检验一下是不是3,都不是的话,就是4.2. 还是利用四平方和定理,但是用到了很多技巧,这个解法是参考网上的答案:根据四平方和定理,任意一个正整数均可表示为4个整数的平方和,其实是可以表示为4个以内的平方数之和,那

2015-10-24 21:31:57 3807

原创 Linux下的socket编程实践(九) epoll实现高并发的原理及其使用

在 linux 没有实现 epoll 事件驱动机制之前,我们一般选择用 selec t或者 poll 等IO多路复用的方法来实现并发服务程序(详见此链接)。在大数据、高并发、集群等一些名词唱得火热之年代,select 和 poll的用武之地越来越有限,风头已经被 epoll 占尽。 本文便来介绍 epoll 的实现机制,并通过对比其不同的实现机制,真正理解为何 epoll 能实现高并发

2015-10-22 12:03:19 9356 1

原创 Jay的中国风---天涯过客

风起雁南下  景萧萧  落黄沙独坐沏壶茶  沏成一夜  灯下你在几里外  的人家  想着他一针一线  绣着花 晨霜攀黛瓦  抖落霜  冷了茶抚琴欲对话  欲问琴声 初落下弦外思念透窗花  而你却什么  也不回答 琴弦断了  缘尽了  你也走了爱恨起落  故事经过  只留下我几番离愁  世事参透  都入酒问你是否  心不在这  少了什么 琴弦断

2015-10-21 22:59:00 1371

原创 Linux下的socket编程实践(八) Select的限制和poll(并发的初步知识)

select的限制用select实现的并发服务器,能达到的并发数一般受两方面限制:1)一个进程能打开的最大文件描述符限制。这可以通过调整内核参数来改变。可以通过ulimit -n(number)来调整或者使用setrlimit函数设置(需要root权限),但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sys/fs/file-max 查看。

2015-10-20 22:44:42 5098 1

原创 Linux下的socket编程实践(七) I/O多路复用技术之select模型

在进入今天的select模型的主题之前,我们先来简单了解一下五种I/O模型:(1)阻塞I/O(默认采用这种方式)在服务端socket编程中,我们常见的accpet函数、recv函数都是采取的阻塞形式。以recv为例: 当上层应用App调用recv系统调用时,如果对等方没有发送数据(Linux内核缓冲区中没有数据),上层应用Application1将阻塞;当对等方发送了数据,Linu

2015-10-19 22:58:57 5097

原创 Linux下的socket编程实践(六)Unix域协议和socketpair传递文件描述符

UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所使用的API相同。UNIX域协议可以视为IPC方法之一,Unix域协议主要用在同一台机子(仅能用于本地进程间的通信)的不同进程之间传递套接字。为什么不用TCP或者UDP套接字呢?1)在同一台主机上, UNIX域套接字更有效率, 几乎是TCP的两倍(由于UNIX域套

2015-10-13 23:42:49 4484 2

原创 [leetcode] 200 Number of Islands(DFS)

非常基础的一道DFS深度优先搜索的题目,当我们遍历数组发现一个位置为'1'时,就是用dfs将其周围的1全部变为0,然后递归继续,这样所有连通成一片的'1'就是一个island,sum++,最后返回sum即可。类似的题目还有 hdu 1016,hdu 1241。int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};class Solution {public:

2015-10-12 23:12:46 2876

原创 Linux下的socket编程实践(五)设置套接字I/O超时的方案

(一)使用alarm 函数设置超时#include unsigned int alarm(unsigned int seconds); 它的主要功能是设置信号传送闹钟。信号SIGALRM在经过seconds指定的秒数后传送给目前的进程,如果在定时未完成的时间内再次调用了alarm函数,则后一次定时器设置将覆盖前面的设置,当seconds设置为0时,定时器将被取消。它返回上次定时器剩余时

2015-10-11 19:57:46 5604

原创 Linux下的socket编程实践(四)TCP的粘包问题和常用解决方案

TCP粘包问题的产生由于TCP协议是基于字节流并且无边界的传输协议, 因此很有可能产生粘包问题。此外,发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一个TCP段。若连续几次需要send的数据都很少,通常TCP会根据优化算法把这些数据合成一个TCP段后一次发送出去,但是接收方并不知道要一次接收多少字节的数据,这样接收方就收到了粘包数据。具体

2015-10-10 00:00:38 5741 1

原创 最短路径算法Dijkstra && SPFA && Floyd 代码实现模板

本文建立在已经了解这三种算法基本思想的基础上,不再对算法进行详细的描述,而是对思想进行比较优秀的代码实现的总结,可以直接用于ACM题目或者实际问题的解决中。Dijkstra算法:    Dijkstra算法是指定一个源点,求得这个源点到各个点的最短路径。Dijkstra算法通过不断的松弛边,并且进行记录,每次更新相邻点的路径,采用类似贪心的思想,使两点之间的距离成为最短的路径。

2015-10-08 23:35:44 1391

原创 [leetcode] 24 Swap Nodes in Pairs(交换链表相邻结点)

(一)迭代法在处理这种问题时,我们通常加上一个dummy头结点指向head,至于思路很清晰了就是隔一个去交换两个相邻结点,比如1->2->3->4->NULL,我们先通过指针交换1和2,再交换3和4,详细的指针操作可以看下面的图:class Solution {public: ListNode* swapPairs(ListNode* head) { Lis

2015-10-05 14:03:17 2389

原创 C++ 大数版的加减乘除代码实现总结

1)大正整数的加法具体思路就是模仿手算的加法,我在这里先将输入的字符串reverse便于操作,最后去掉结果的前置0即可。注意:如果答案就是0,那么需要特殊处理。大量的测试数据可以 上交至hdu 1002[cpp] view plaincopy#include  #include  #include  using n

2015-10-05 10:39:12 15013 1

原创 Linux下的socket编程实践(三)端口复用和 P2P多进程服务器

Socket端口复用先说为什么要使用socket端口复用?如果你遇到过这样的问题:server程序重启之后,无法连接,需要过一段时间才能连接上? 1.一个监听(listen)server已经启动  2.当有client有连接请求的时候,server产生一个子进程去处理该client的事物.3.server主进程终止了,但是子进程还在占用该连接处理client的事情.虽然子进

2015-10-05 10:17:01 3469

原创 [leetcode] 221 Maximal Square(最大全1正方形 &动态规划)

当我们判断以某个点为正方形右下角时最大的正方形时,那它的上方,左方和左上方三个点也一定是某个正方形的右下角,否则该点为右下角的正方形最大就是它自己了。这是定性的判断,那具体的最大正方形边长呢?我们知道,该点为右下角的正方形的最大边长,最多比它的上方,左方和左上方为右下角的正方形的边长多1,最好的情况是是它的上方,左方和左上方为右下角的正方形的大小都一样的,这样加上该点就可以构成一个更大的正方形。

2015-10-04 23:04:17 7532 5

原创 Linux下的socket编程实践(四)TCP服务端优化和常见函数

并发下的僵尸进程处理只有一个进程连接的时候,我们可以使用以下两种方法处理僵尸进程:1)通过忽略SIGCHLD信号,避免僵尸进程    在server端代码中添加    signal(SIGCHLD, SIG_IGN);2)通过wait/waitpid方法,解决僵尸进程signal(SIGCHLD,onSignalCatch); void onS

2015-10-04 22:56:28 2289 1

原创 Linux下的socket编程实践(二)socket编程基本API简介

Socket是什么      socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现, socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。 说白了Socket是应用层与TCP/IP协议族通信的中

2015-10-02 22:30:11 2098

原创 [leetcode] 22 Generate Parentheses(递归)

简单的递归构造。小括号串是一个递归结构,跟单链表、二叉树等递归结构一样,首先想到用递归。一步步构造字符串。当左括号出现次数小于指定的n时,可以放置新的左括号。当右括号出现次数小于左括号出现次数时,就可以放置新的右括号。我们可以将string放进参数,这样回溯的时候不必在进行删除处理。class Solution { public: void solve(int n,string s,

2015-10-01 23:20:57 3224

原创 Linux下的socket编程实践(一) 网络基本知识以及 TCP/IP简述

ISO/OSI七层参考模型1.物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。(标志:RJ-45)2.数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问

2015-10-01 20:02:25 3967

gdb多线程调试小文件

基于Linux64位的多线程小程序,答案就在某个线程的堆栈中,请使用gdb命令查看哈

2016-03-03

随机数生成器

随机数生成器,自定义范围,支持跳变,适用于各个活动的抽奖

2015-11-30

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

TA关注的人

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