自定义博客皮肤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的博客

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

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

原创 [leetcode] 222 Count Complete Tree Nodes

1.最容易想到的方法:递归遍历每个点,计算出总的点数,时间复杂度O(n),很不幸,超时了。(不超也说不过去啊==)class Solution {public: int countNodes(TreeNode* root) { if(root==NULL) return 0; int res=0; if(root->le

2015-08-31 20:55:06 1609

原创 C++ Primer 学习笔记与思考_10 类型转换易错处大总结

(一)隐式转换先来看一组样例:int ival=0;ival=3.451+3;首先做加法操作,操作数分别为int和double类型,c++并没有直接把两个数加在一起,而是提供了一组转换规则,以便在执行算术操作之前,将两个操作数转换为同一种数据类型。在这里是自动执行的,所以他们被成为隐式转换。因为 C++定义了算术类型之间的内置转换以尽可能防止精度损失,所以这里3转换为doub

2015-08-31 10:56:49 1544 1

原创 0-1背包打印路径(递归和非递归版本)

简单的0-1背包打印路径问题,我们可以记录一个p[][]数组来判断,当前物品是否被选中,最后按照记录输出,注意是逆序。#include #include int main() { int a[25],p[25][10005],i,j,n,m,s[10005]; while(scanf("%d%d",&m,&n)!=EOF){ for(i=

2015-08-30 23:44:14 2018

原创 BestCoder Round #53(hdu 5422&5423&5424)

hdu 5422:题意:给出一个n个顶点,m条变的无向图,现在让你添加一条边,使1到n的最短路最短,并且在最短的情况下写出可以添加的边的不同数目。思路:很简单,两种情况:1.如果1到n之间原来不存在边,那么我们添加的这一条边肯定是1~n,所以最短路一定是1,方法只有一种;2.如果1和n之间原来存在边,那么我们就随意连两个顶点即可,方法是n*(n-1)/2。#include #incl

2015-08-30 00:19:49 2428 1

原创 C++ Primer 学习笔记与思考_9 表达式中过的那些容易忽略的地方

(一)移位操作符用于IO输入输出标准库分别重载了位操作符>>和cout将其执行为:( (cout在这个语句中个,操作数”hi”和第一个移位操作符具有中等优先级:其优先级比算术操作符低,但是比关系运算符、赋值运算符和条件操作符优先级高。若IP表达式的操作数包含了比IO操作符优先级低的操作符,相关的优先级将影响书写该表达式的方式。这种情况下,使用圆括号强制实现右集结合。

2015-08-27 21:33:32 1262

原创 教你如何快速使用Github

以前看过几篇github的使用教程,感觉还是不是很清晰,自从看到了这篇,通俗易懂,也学会基本的使用了,在此为大家推荐。(转自知乎,为了能让更多的人看到,请允许我使用 “原创”,如果侵权请联系。)Github的基本功能:·Repository:你和我一起做“知乎首页”,“知乎首页”就是Repository,即项目或者”未来武器T2级425mm磁轨炮“之类,怎么叫随你,你只需知道Rep

2015-08-26 23:26:52 1574

原创 单链表的反转(数据结构 面试题)

编写一个算法来颠倒一个链表,该链表的第一个结点由first指向。不要复制列表元素;而是重置链接和指针,使得first指向原来的最后一个结点,并且结点之间的所有链接都反向。思路:因为题目中明确说明不能复制元素,所以通过复制来重置另外一个链表的想法被终止。我们想到,如果要改变连接的指向,又能够要使链表继续遍历,那么最少需要先遍历到几个结点呢?答案是3个。如图:(第二张是将要结束时的情况)

2015-08-25 23:26:55 1610

转载 深入浅出之正则表达式

转自 http://dragon.cnblogs.com/archive/2006/05/08/394078.html1.      什么是正则表达式基本说来,正则表达式是一种用来描述一定数量文本的模式。Regex代表Regular Express。本文将用>来表示一段具体的正则表达式。一段文本就是最基本的模式,简单的匹配相同的文本。 2.      不同的正则表达式引擎

2015-08-25 12:15:32 1376

原创 使用不带头结点的循环链表实现队列(数据结构)

我使用类模版来完成循环链表实现队列的操作。首先定义一个结点类node用来保存结点信息,然后定义队列类Queue,接下来我们思考:要完成队列的4个基本操作即1.判断队列是否为空2.在队列尾部push进数据3.从队列头部取出数据4.删除掉队列首部的元素我们这个Queue类需要什么成员变量?答案是: (维护)队列尾部结点、队列大小就够了。我们来分析,尾部push数据的时候,我

2015-08-24 23:22:39 6770

原创 C++ Primer 学习笔记与思考_8 指针和const的那些麻烦

(一)数组的下标和指针的关系我们以前知道,在表达式中使用数组名时,实际使用的是指向数组第一个元素的指针。当我们使用下标访问数组时,实际上是对指向数组元素的指针做下标操作,只要数组指向数组元素,就可以对它进行下标操作。像下面程序中的p[-1]这种表示方法,可能乍一看比较别扭,但是就像我们平常用的,数组名就可以看作是指向首元素地址的指针,后面[]内的只是偏移量,这样理解的话,哪怕是负值我们也很

2015-08-22 18:34:17 1504

原创 Trie树的常见应用大总结(面试+附代码实现)

(一)Trie的简介Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。他的核心思想是空间换时间,空间消耗大但是插入和查询有着很优秀的时间复杂度。(二)Trie的定义Trie树的键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀(prefix),从根节点到当前结点的

2015-08-21 16:18:45 11237 3

原创 C++ 的忠告

1.把C++当成一门新的语言学习(和C没啥关系!真的。);  2.看《Thinking In C++》,不要看《C++变成死相》;  3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;  4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——

2015-08-20 23:16:00 1416

原创 [leetcode] 240 Search a 2D Matrix II

很经典的一道题,每行由左到右,每列由上到下升序排列,让我们采用高效的算法判断一个值是不是存在。第一种方案:遍历行,若发现行首的元素这个算法的最坏时间复杂度是O(n*logm)。当然如果你对行也进行二分搜索,确定一个搜索的行的范围的话,时间复杂度会更低。class Solution {public: bool searchMatrix(vector >& matrix, int

2015-08-19 12:15:38 1404

原创 socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信

在上一篇博文中,我们介绍了利用socket进行简单的UDP/TCP的服务端和客户端的通信。(一)在基于UDP的程序中,你有没有想过,如果我的这台主机在通讯的时候要求既能够收到别的主机发来的数据,又能够自己向目的主机发出数据,该怎样实现?也就是说需要两个while循环同时进行。答案是使用多线程,一个线程用于接受数据,另一个线程用来发送数据。接下来我们介绍WinSock的多线程编程。多线程

2015-08-18 18:41:09 6165

原创 C++ Primer 学习笔记与思考_7 void和void*指针的用法

(一)void的含义void的字面意思是“无类型”,void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:void a;这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。void真正发挥的作用在于:(1) 对函数返回的限定;(2) 对函数

2015-08-18 10:21:09 2146

原创 socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信

因为UNIX和Win的socket大同小异,为了方便和大众化,这里先介绍Winsock编程。socket 网络编程的难点在入门的时候就是对基本函数的了解和使用,因为这些函数的结构往往比较复杂,参数大部分都是结构体,令人难以记忆和理解。但是一旦我们知道这些函数包括其参数的具体含义,socket网络编程也就变得不是那么复杂。这里不赘述 具体函数的详细含义,网络上有很多的文章,同时笔者建议大家参

2015-08-17 22:23:36 8359 3

原创 C++ Primer 学习笔记与思考_6 数组和动态数组易错点解读

1. 数组的定义数组定义中的类型名可以是内置数据类型或者类类型;除了引用之外,数组元素的类型还可以是任意的复合类型。另外,非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。#include #include #include #include using namespace std;int main(){ const int MAXN1 =

2015-08-16 13:08:00 1495

原创 C++ Primer 学习笔记与思考_5 bitset你用的正确吗?

bitset类型比整型值上的低级位操作更容易使用,简化了位集的处理。在定义bitset时,要明确bitset含有的位数,在尖括号内给出它的长度值。注意位集合的编号从0开始,低位存低阶位。最重要的一个问题:bitset的下标是从右边开始的!!!!很多人的博客都写错了,希望引起大家注意。1.使用unsigned long值初始化bitset对象     若bitset类型长度大于uns

2015-08-15 10:20:32 2065 1

原创 [leetcode] Bitwise AND of Numbers Range(位运算)

不得不说位运算的应用都是很巧妙的。这道题求一个连续区间整数的与运算的值,突破点在于连续的区间这个特点。我们可以先找几个数看一下规律,2 3 4 5的二进制分别是 10 ,11,100,101,可以发现若m==n,则m为答案;当m!=n时,因为连续的两个数的二进制的最后一位肯定不一样,与的值一定是0,前面相同的部分(1&1=1,0&0=0)保持。所以我们每次先判断,不同的话就右移一位

2015-08-14 23:14:50 1218

原创 C++ Primer 学习笔记与思考_4 ---getline&&size_type&&const_iterator混搭

(一)getline的用法    我们在使用string读入字符串的时候,其输入操作符:* 读取并忽略开头所有空白字符(如空格,换行符,制表符)* 读取字符直至再次遇到空白字符,读取终止。所以如果我们输入“hello world”,string将只输出hello。为了解决这个问题,我们引入getline函数,它接受两个参数:一个输入流对象和一个string对象,但是getlin

2015-08-14 10:45:47 1554

原创 C++ Primer 学习笔记与思考_3 ---头文件那些事儿(extern)

(一)extern在头文件中的用法因为头文件包含在多个源文件中,并且变量的定义只能出现一次,所以在头文件中, 只可以声明不可以出现定义。我们可以在头文件中用extern声明全局变量,这样在包含此头文件的cpp 中可直接使用 声明过的这个全局变量(如以下程序中的变量a)。但是有三个例外:1.头文件中可以定义类2.值在编译时就已经知道的const对象3.可以定义inline函数

2015-08-13 12:35:15 1571

原创 C++ 控制台版 2048小游戏

先说说2048游戏的规则:开始的时候空格中会出现两个数字(只能为2或者4),用户可以选择上下左右键进行移动,数字们整体沿着方向移动,中间不存在空格,如果相邻的两个数字相等,那么合并至沿着方向的后一个,更新最大值,总分数加上新出现的数字。当出现2048,Win。或者没有空格了,Lose。基本就是一个按照思路的模拟题,没有什么难度。不过我想写一个自动求解的程序,但是bfs搜索的话解空间太庞大,

2015-08-12 19:09:15 3482 2

原创 C++学习笔记与思考_2 --const限定符及其引用,typedef符号

1. 定义const对象因为常量在定义后就不能被修改,所以在定义时必须进行初始化。const int bufSize=512;const int i; // error; i is uninitialized const2. const 对象默认为文件中的局部变量我们知道,如果我们在一个文件中定义了一个非const变量,如果我们想在另一个文件中使用这个变量,只需要在使用前添加

2015-08-10 10:41:34 1414

原创 线段树经典操作模板(单点更新,替换;区间更新,替换;区间求和求最值)

对于线段树的讲解此篇不再赘述,下面列出线段树应用中最常用的几种操作的代码。(具体题目未贴出,仅供有一定基础者参考代码风格)另外,注意多组输入要写scanf("%d%d",&n,&m)!=EOF,线段树的题肯定要用c语言的输入输出,要使用字符数组,不用字符串,输入字符的时候要加getchar()吞噬空行..(1)单点增减,区间求和:#include#include#include#

2015-08-09 18:37:11 3473 1

gdb多线程调试小文件

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

2016-03-03

随机数生成器

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

2015-11-30

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

TA关注的人

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