自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小胡——uYou的专栏

静下心去写,静下心来想------------我的小窝

  • 博客(85)
  • 收藏
  • 关注

原创 面试题37:两个链表的第一个公共节点

题目:输入两个链表,找出它们的第一个公共结点。     这一题我考虑的是,先分别求出每个链表的长度,然后用一个set收集所有的值。因为set中不允许有重复的值。那么两个链表的长度和减去set的size就是公共链表的长度,再从头遍历下,即可求得。算法的复杂度是O(m*lgm+n*lgn).m,n分别为链表的长度。     代码如下:     struct ListNode { int

2016-07-15 20:01:05 312

原创 面试题36:数组中的逆序对

题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。   这一题很容易想到O(n*n)的算法,但是显然不是很优。然后考虑了很久,也没有想出来。参考书上的思想。   代码如下:    class Solution {public: long InversePairs(vector data){

2016-07-15 17:40:45 456

原创 面试题35:第一个只出现一次的字符

题目:在一个字符串(1      此题开始想到的是map,用键去记录出现的字符,用值去记录字符出现的次数。这样遍历一遍花费时间为O(n*lgn)。空间较小,只是维护各个出现的字符串的map的空间。      代码如下:      class Solution {public: int FirstNotRepeatingChar(string str) { ma

2016-07-15 09:29:43 391

原创 面试题34:丑数

题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。    这一题可以用典型的动态规划来做。用一个数组去保存前面求得的丑数,后面的丑数是前面丑数的2倍,3倍或者5倍。具体看代码:    class Solution {public: int GetU

2016-07-14 22:30:58 1295

原创 面试题33:把数组排成最小的数

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。      这题不会,看书上的思想做的。      思想是:找到一个排序规则,使得根据这个排序规则能排成一个最小的数。考虑m,和n,考虑mn到还是nm大,就可以确定排序规则了。但是考虑到位数多的话涉及到大数问题

2016-07-14 19:37:24 225

原创 字符串和数字相互转换

在boost中,有一个万能转换工具,它就是boost::lexical_cast,它可以在任何数值间进行转换,当然也包括字符串和数字间的转换。#include #include #include using namespace std;using namespace boost;int main(){ string s="123"; int a=lexical_cast(s

2016-07-14 15:08:03 664

原创 面试题32:整数中1出现的次数(从1到n整数中1出现的次数)

题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。     此题我是全程懵逼的,开始想到找规律,各种找,以前貌似找过,其实是有的,但是找的过程很复杂,想的有没

2016-07-14 09:45:27 326

原创 面试题31:连续子数组的最大和

题目:输入一个整形数组。数组中有正数也有负数。数组中一个或者连续多个整数组成的一个子数组。求所有的子数组和的最大值。要求时间复杂度为O(n)。       这题可以用典型的动态规划来解。可以找到规律,考虑声明一个数组a[len],m[i]代表取前面i个数时它的子数组的最大值。考虑第i个数,当前面i-1个数的最大值是m[i-1];此时m[i]=max(m[i-1]+a[i],a[i]);代码

2016-07-06 22:51:13 248

原创 面试题30:最小的K个数

题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。     首先考虑用一个堆去维护最小数的序列。可是c++中自己去实现一个堆感觉代码有点多了。看了下书上推荐用set。它的底层实现就是红黑树。代码如下。class Solution {public: vector GetLeastNumbers_Solut

2016-07-06 21:59:40 238

原创 面试题29:数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。     这题要做出来比较简单,但是要考虑优化就不那么容易了。首先,写个简单的 。class Solution {public: int MoreThanHalf

2016-07-06 17:10:57 270

原创 面试题28:字符串的排列

题目:输入一个字符串,打印该字符串的字符的所有排列。        全排列问题面试中经常看到,思想是开始取第一个字符,然后求后面字符的全排列。再分别将第一个字符与后面的字符交换,再全排列。代码如下:         class Solution {public: vector Permutation(string str) { vector vect;

2016-07-05 21:05:39 212

原创 面试题27:二叉搜索树和双向链表

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点的指针的指向。       开始没什么思路。但是想到二叉树的所有题目几乎都可以用递归来做。就想到先找根节点。考虑根节点的左边,根节点肯定是连接左子树的最大值点,想到先找根节点的左子树的最大节点。然后找右子树的最小节点,一连起来,再递归,想到就可以实现了。但是写程序的时候发现有点复杂,于是

2016-07-04 19:39:52 248

原创 面试题26:复杂链表的复制

题目:复制一个复杂链表。在复杂链表中,每个节点除了有一个next指针指向下一个节点外,还有一个指针指向链表中的任意节点或者NULL。       这道题之前从未见过。一开始反应是先按照正常的链表复制方法。也就是只有next指针的链表。然后再重新遍历一遍,复制链表的另外一个指针。但是,要考虑寻找一个已知的链表节点的时间复杂度是O(n),必须从头往后遍历。也就使得整个算法的时间复杂度是O(n*n)

2016-07-03 20:20:30 215

原创 面试题25:二叉树中和为某一值的路径

题目:输入一棵二叉树和一个整数。打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点成为一条路径。        这题开始用堆栈来做,我也不知道自己写的什么鬼。后来还是用递归来做,代码如下:         struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; T

2016-07-03 15:42:13 216

原创 面试题24:二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。是返回true,否则返回false.假设输入的数组元素均不相同。       二叉搜索树左边节点小于根节点值,右边节点值大于根节点值。首先找到根节点,然后判断将前面的归于左子树,右边归于右子树。如果右边中出现了比根节点值小的情况。则不是树的后序遍历节点,可以用递归来做。      代码如下:       class

2016-07-02 11:51:45 261

原创 面试题23:从上往下打印二叉树

题目:从上往下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印。       这题挺简单的。相当于广度优先搜索,考虑用队列来做。如果是深度优先,可以使用堆栈或者采用递归。代码如下:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val

2016-07-02 10:18:37 282

原创 面试题19:二叉树的镜像

题目:完成一个函数,输入一个二叉树,输出它的镜像。      该题考虑递归较为简单。先交换两个子节点,然后再递归求解。画一个图可以较好的理解。博客上画比较困难,在此就不多画了。

2016-07-02 10:09:01 201

原创 面试题22:栈的压入,弹出系列

题目:输入两个整数序列。第一个序列表示栈的压入顺序,请判断第二个序列是否是栈的弹出顺序。假设压入栈的所有数字均不相等。例如1,2,3,4,5是某栈的压入序列,序列4,5,3,2,1是该栈序列对应的一个弹出序列,但是4,3,5,1,2就不可能是该压栈的弹出序列。      看到该题目开始想的是用一个栈去实现。思路也是对的,但是思路出来了代码没写出来,各种错误,心里很急躁啊,静不下心来调,只有看书

2016-07-01 17:52:31 293

原创 面试题21:包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,调用min,push及pop的时间复杂度为O(1)。       这个题目push和pop都好做,但是min感觉不好做。思考可以用一个临时量记录min的值。但是没想到用一个数据结构去保存每次入栈、出栈的最小值。哎。。。       看了下原文,是用另外一个栈去维护最小值,好吧。。。代码如下:       cl

2016-06-30 20:43:28 257

原创 面试题20:顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。      这个问题之前在leecode上也碰到过,当时有人写了一种挺好的方法,借助于游戏设置上下左右的方法,具体有点不记得了。这道题看上去简单,但是写起来不容易,各种情况,开始很难考虑全,先写书上提到的方法吧。 class Solution {public: vector printMatrix(vector >

2016-06-30 20:02:32 345

原创 c++类成员函数作为回调函数

一直以来都被回调函数的定义给整蒙了。最近又仔细学了会,感觉回调函数,我认为就是将一个函数指针A作为参数传入另外一个函数B,然后在函数B中调用函数A。      普通回调         具体先看一个简单的例子:        #include void printWelcome(int len){ printf("welcome -- %d\n", len);

2016-06-29 22:44:30 24035 3

原创 zookeeper入门

原博客写的非常好,建议看。       还有关于c API的,在这里。

2016-06-28 15:04:35 314

原创 log4cxx样例

在此记录一个log4cxx样例程序。        先是属性文件properties:   log4j.rootLogger=INFO,ca,fa#控制输出到文件log4j.appender.fa=org.apache.log4j.FileAppender#输出到文件output.loglog4j.appender.fa.File=./output.log#以文件追加的方式lo

2016-06-19 10:56:27 692

原创 python第一只爬虫:爬豆瓣top250

这两天不想看论文,不想看书,就学着慕课网上的python爬虫视频课,试着写了个爬豆瓣top250的读书,程序写的较乱,就当记录下。        import urllib2from bs4 import BeautifulSoupimport reimport urlparseclass SpiderMain(object): def __init__(self):

2016-06-13 16:39:24 648

原创 c++ 异常处理

c++ 异常处理设计到三个关键字,分别是throw,try和catch。      程序使用throw抛出异常,将可能出错的程序段放在try中,并用catch进行捕获。      先举个例子:#include #include using namespace std;void test(){ throw "exception"; cout<<"test()"<<e

2016-06-10 16:02:38 283

原创 c++ 多态小结

定义:      多态:指相同对象接收到不同消息或者不同的对象接收到相同的消息时产生的不同的动作。      前者,相同的对象接收不同的消息可以看做函数的多态,也就是函数的重载,这种多态是静态的多态,表面上看函数的名称一样,或者由于参数的类型或者个数或者返回值形成的不同的函数重载,在编译器编译的时候,尽管函数名称相同,但是在编译过后会生成不同的函数,这发生在函数运行之前,称之为静态的多态。

2016-06-10 10:01:14 338

原创 面试题18:树的子结构

题目:输入两颗二叉树A和B ,判断B是不是A的子结构。     想到关于二叉树的题目,基本可以按照递归的思路来做,很快写出以下代码:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL)

2016-06-06 09:54:02 371

原创 面试题17:合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表使新链表仍然是递增排序的。        题目还算简单,就是要考虑的特殊情况挺多的。代码如下:      struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};class Solution {pub

2016-06-05 22:39:42 227

原创 面试题16:反转链表

题目:反转链表。输入链表的头结点,反转输出反转后链表的头结点。           这种链表操作的题之前做过,还专门写过链表反转的东东。咋一看,觉得这用递归不so easy吗。结果,papa打脸了,写了半个多小时才出来,面试肯定就挂了。都要哭了,代码写一万遍都不会啊。          先用递归实现:       struct ListNode { int val; str

2016-06-05 11:13:25 226

原创 面试题15:链表中倒数第k个节点

题目:输入一个链表,输出该链表中倒数第k个节点。从1开始计数,如链表有1,2,3,4,5,6.倒数第三个节点是值为4的节点。    可以采用两个指针,思路比较清晰,但是就是一些边界条件很难考虑全,比如k超出了链表的长度。   struct ListNode { int val; struct ListNode *next; ListNode(int x) :val(x), next(

2016-06-04 17:09:20 281

原创 面试题14:调整数组顺序使奇数在偶数前面

题目:输入一个整数数组,实现一个函数来调整数组中数字的顺序,使得奇数位于数组的前半部分,偶数位于数组的后半部分。     咋一看,没有限定空间复杂度,直接想到声明两个数组,一个存奇数,一个存偶数。再合并。时间复杂度O(n),空间复杂度O(n),代码如下:      class Solution {public: void reOrderArray(vector &arra

2016-06-04 10:28:22 320

转载 vs2013专业版密钥

Visual Studio Professional 2013  KEY(密钥): XDM3T-W3T3V-MGJWK-8BFVD-GVPKY亲测可用,另外找到几个其它的,我没有试过,一并摘抄在这。Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9Visual Studio Premium 20

2016-06-04 10:12:28 1548

转载 文本文件和二进制文件的区别

1. 文本文件与二进制文件的定义大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。从上面可以

2016-05-28 16:47:45 415

原创 c语言文件输入输出函数小结

一个文件就是磁盘上一段命名的存储区。对于linux系统,所有的一切都是文件。一直以来对文件的读写操作总不太熟悉,小结一下。      一般编写c程序时,系统自动为您打开三个文件。这三个文件分别是标准输入,标准输出和标准错误输出,对应的文件描述符分别为0,1,2.系统默认标准输入设备为键盘,标准输出设备为显示器。      写一个常用的计数程序先练练手。      #include

2016-05-27 15:06:11 710

转载 vim使用简明教程

vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。——————————正文开始——————————你想以最快的速度学习人类

2016-05-27 09:10:02 262

原创 c语言字符串操作小结

c字符串小结

2016-05-26 21:14:26 397

原创 主线程退出后,子线程会不会退出

额,好吧,这是个标题党,其实所有的线程都是平级的,根本不存在主线程和子线程。下文所述为了方便,将在main函数中的线程看做主线程,其它线程看成子线程,特此说明。先考虑以下代码:        #include #include #include void* thrd_start_routine(void* v){ sleep(10); printf("cr

2016-05-26 11:34:05 16019 2

原创 PV 线程同步和多线程问题

PV操作:        基于信号量的线程同步问题,主要用到P和V操作        信号量s是具有非负整数值的全局变量,它只能由两类特殊的操作来处理。这两种操作分别称为P和V;、       P(s)        如果当s是非0的,那么P将s-1,并且立即返回。如果开始s就是0,那么就挂起这个线程等待。        V(s)       将s加1,如果有线程阻塞在P操

2016-05-24 15:51:21 1062

原创 JD 2016年实习生笔试题

第一次做公司的笔试题,各种不适应。写出程序也只有一个错误的表示,又不能调试,又不知道错误在哪,整个过程很纠结,感觉题目不难,但是限定时间调出来还是不容易,太渣了,后来记录整理下,记在这。第一题:小明想找班级分数最高的同学:输入学生的人数,再输入每位学生的分数和姓名,求最高分的学生姓名。输入:第一行输入正整数N,表示学生人数,接着输入N行,每行格式为:分数 姓名分数为非负整数,且小于等于

2016-05-23 17:54:32 638

原创 STL迭代器失效

对于许多STL容器,插入或者删除元素都可能带来迭代器失效的问题。 举个例子:#include <iostream>#include <vector>using namespace std;int main(){ vector<int> container; for (int i = 0; i < 10; i++) { container.push_

2016-05-21 21:37:43 356

空空如也

空空如也

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

TA关注的人

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