自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(163)
  • 收藏
  • 关注

原创 程序员面试金典--面试26之介于0和1之间的实数,类型为double,返回它的二进制表示

题目描述有一个介于0和1之间的实数,类型为double,返回它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,返回“Error”。给定一个double num,表示0到1的实数,请返回一个string,代表该数的二进制表示或者“Error”。测试样例:0.625返回:0.101思路:0.5 == 1.0 / (2)   0.25 == 1.0 / (2

2017-05-05 23:41:16 764

原创 C/C++项目之大数据的加减乘除求模以及括号四则运算

BigData.h#pragma once#include#includeusing namespace std;#include#includetypedef long long INT64;class BigData{public: BigData(INT64 value); BigData(const string & strData); friend

2017-05-04 22:07:35 1730 1

原创 程序员面试金典--面试25之将m的二进制数位插入到n的二进制的第j到第i位

题目描述有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始。给定两个数int n和int m,同时给定int j和int i,意义如题所述,请返回操作后的数,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1。测试样例:1024,19,2,6返回:1100思路:         

2017-05-04 21:44:58 1011

原创 程序员面试金典--面试24之二叉树和为某一值的路径

题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:      递归先序遍历树, 把结点加入路径。     若该结点是叶子结点则比较当前路径和是否等于期待和。是的话打印从根节点到叶子节点的路径。    弹出结点,每一轮递归返回到父结点时,当前路径也应该回退一个结

2017-05-04 21:14:43 230

原创 程序员面试金典--面试23之求出满二叉树a和b点的最近公共祖先的编号

题目描述有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。给定两个int a,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。测试样例:2,3返回:1分析:这道题因为说了是满二叉树,所以父节点的编号是孩子节点的编号除以2,

2017-05-02 23:47:32 424

原创 linux下模拟实现sleep以及sleep会出现的问题解决方案

linux下的sleep这个函数相信我们都不陌生了,它的作用就是让程序休眠一定的秒数,到时间后自动恢复。这里我们主要用到三个函数:(1)alarm()函数 #include unsigned int alarm(unsigned int seconds);采用alarm()函数设定需要睡眠的秒数,到时间后闹钟会发送SIGALRM信号给当前进程。但SIGALR

2017-05-02 14:32:59 4537

原创 线程安全与可重入函数的关系

线程安全:一般来讲就是一个代码块被多个并发线程反复调用时会一直产生正确的结果。线程安全问题都是由全局变量及静态变量引起的。任何未使用静态数据或其他共享资源的函数都是线程安全的。而使用全局变量或静态局部变量的函数是非线程安全的。 使用静态数据或其他共享资源的函数,必须通过加锁的方式来使函数实现线程安全。线程安全函数解决多个线程调用函数时访问共享资源的冲突问题。

2017-05-02 13:42:09 1308

原创 程序员面试金典--面试22之寻找二叉树中指定结点的下一个结点

题目描述请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。方式一:中序遍历树,将树中节点的值保存到vector中,再遍历一遍vector,找到指定的值的下一个。

2017-05-01 12:59:21 324

原创 面试21之检查一颗二叉树是否为二叉查找树

题目描述请实现一个函数,检查一棵二叉树是否为二叉查找树。给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。树节点的定义:struct TreeNode{ int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x)

2017-05-01 00:05:12 645

原创 海量数据以及大数据常考的笔试面试题

【题目1】(腾讯公司)给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?【题目2】(July整理) 在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。【题目3】 海量日志数据,提取出某日访问百度次数最多的那个IP【题目4】怎么在海量数据中找出重复次数最多的一个?【题目5】 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?【题目6】有10个文件

2017-04-30 21:27:40 4199

原创 面试20之创建含有某一深度上所有结点的链表。

题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。:层次遍历      这个题目的意思就是输

2017-04-29 00:14:38 618

原创 面试19之创建一颗高度最小的二叉搜索树

题目描述对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。注意:这只是求高度最小的二叉查找树,不是真的要构建一颗树,完全二叉树的高度最小。为log2^n + 1//第一种方式,二分法,非递归写法。int BuildMinimalBST(vector v

2017-04-28 15:57:22 1045

原创 面试18之猫狗队列

题目描述        有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。       给定一个操作序列int[][2] ope(C++中为vector>)代表所有事件。若第一个元素为1,则代表有动物进入收容所,第二个元素为动物的编号,正数代表狗,负数代表

2017-04-27 19:06:43 434

原创 面试17之判断一颗树是不是平衡二叉树

题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。题目分析:  :       平衡二叉树是通过左右子树的高度来判断是否为平衡二叉树的,所以我们首先想到的是如何求一个树的高度,求一个树的高度很简单

2017-04-27 16:02:34 664

原创 面试16之双栈排序

题目描述请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector&ltint>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。测试样例:[1,2,3,4,5]返回:[5,4,3,2,

2017-04-26 13:50:57 284

原创 数据结构之哈希表二(用开散列法实现哈希表)

前面我们讲了哈希冲突的闭散列(开放定址法)的两种方法,现在我们来介绍另一种方法:开散列法。通常,每个桶中的同义词子表都很短,设有n个关键码通过某一个散列函数,存放到散列表中的m个桶中,那么每一个桶中的同义词子表的平均长度为n/m。这样以搜索平均长度为n/m的同义词子表代替了搜索长度为n的顺序表,搜索效率快的多。应用开散列法处理溢出,需要增设链接指针,似乎增加了存储开销。

2017-04-25 12:18:12 1407

原创 数据结构之哈希表

1.什么是哈希表HashTable-散列表/哈希表,是根据关键字(key)而直接访问在内存存储位置的数据结构。它通过一个关键值的函数将所需的数据映射到表中的位置来访问数据,这个映射函数叫做散列函数,存放记录的数组叫做散列表。【常见哈希函数】>> 直接定址法取关键字的某个线性函数为散列地址,Hash(Key)= Key 或 Hash(Key)= A*Key +B,A、B为

2017-04-25 11:37:38 275

原创 面试15之用两个栈去实现一个队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。:入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。#includeusing namespace std;#includeclass Solution{

2017-04-25 10:03:05 200

原创 面试14之请实现一种数据结构SetOfStacks

题目描述请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。给定一个操作序列int[][2] ope(C++为vector>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个int[][]

2017-04-24 21:41:01 725

原创 面试13之检查链表是否为回文

题目描述请编写一个函数,检查链表是否为回文。给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。测试样例:{1,2,3,2,1}返回:true{1,2,3,2,3}返回:false#includeusing namespace std;#includestruct ListNode{ int val; struct Li

2017-04-23 09:52:44 279

原创 面试12之给定两个链表ListNode* A,ListNode* B,请返回A+B的结果

有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。测试样例:{1,2,3},{3,2,1}返回:{4,4,4}本题的思路很简单,按照小学数学中学习的加法原理从末尾到首位,对每一位

2017-04-23 08:43:37 5498 2

原创 面试11之以给定值x为基准将链表分割成两部分

编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。分析:(1)创建两个链表,把大于等于x的放到链表big,小于x的放到链表small             (2)将两个链表拼接起来,注意处

2017-04-23 00:26:14 1432

原创 面试10之删除非尾节点

题目描述实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true思路:正常的删除一个结点思路是,给定一个链表头和一个结点。当访问到指定结点pNode时,即pHead->next 等于指定结点, pHead->next = pNode->next->next

2017-04-21 17:00:30 192

原创 面试9之输入一个链表,输出该链表中倒数第k个结点。

题目描述输入一个链表,输出该链表中倒数第k个结点。#includeusing namespace std;#includestruct ListNode{ int Val; struct ListNode *next; ListNode(int x):Val(x),next(NULL) { } };ListNode* FindKthToTail(ListNode

2017-04-21 16:55:39 276

原创 STL源码剖析 --vector

vector容器概述      vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,

2017-04-21 12:29:41 424

原创 面试8之给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成

假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。测试样例:"Hello world","worldhell

2017-04-19 19:58:33 5945 1

原创 深度剖析空间配置器(三)内存处理函数

空间配置器主要分三个文件实现,我们已经介绍过第一个文件了(对象的构造和析构   http://blog.csdn.net/hj605635529/article/details/70238270),第二个(http://blog.csdn.net/hj605635529/article/details/70238728  一二级配置器)现在我们来介绍第三个文件 stl_un

2017-04-19 14:18:47 386

转载 深度剖析空间配置器(二)一二级配置器

空间配置器主要分三个文件实现,我们已经介绍过第一个文件了(对象的构造和析构   http://blog.csdn.net/hj605635529/article/details/70238270),现在我们来介绍第二个文件 stl_alloc.h  也就是空间配置器的精华所在  文件中定义了一、二两级配置器   其设计思想为:向 system heap 要求空间;考虑多线程 (

2017-04-19 12:28:49 785

原创 深度剖析空间配置器(一)构造和析构函数

STL空间配置器主要分三个文件实现,首先我们来介绍第一个文件stl_construct.h  这里定义了全局函数construct()和destroy(),负责对象的构造和析构。先介绍构造函数 construct():#include //定位new 的头文件template inline void _Construct(_T1* __p, const _T2& __v

2017-04-19 11:38:44 503

原创 面试7之请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。

题目描述请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。给定一个N阶方阵int[][](C++中为vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内。测试样例:[[1,2,3],[0,1,2],[0,0,1]]返回:[[0,0,3],[0,0,0],[0,0,

2017-04-18 11:41:50 1387

原创 AVL树的实现

1.为什么提出AVL树学习完搜索二叉树以后,我们应该想到一个问题,如果我们的搜索二叉树的趋向于单链的形式,类似于: 这两种情况随之而来的是时间复杂度太高,当我们在这两种当中搜索,时间复杂度为O(N),所以这样效率大大下降了!2.二叉平衡树概念和结构为了解决上述问题,所以提出了一个概念,叫做二叉平衡树。二叉平衡树,相对于二叉搜索树,引入了一个叫做平衡因

2017-04-17 22:42:54 192

原创 面试6之像素(矩阵)翻转

题目描述有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。测试样例:[[1,2,3],[4,5,6],[7,8,9]],3返回:[[7,4,1],[8,5,2],[9,6

2017-04-17 13:45:56 512

原创 面试5之编写一个方法,实现基本的字符串压缩功能。

题目描述利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。测试样例"aabccccca

2017-04-16 23:06:22 1475

原创 面试4之字符串中的空格全部替换为“%20”

请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。测试样例:"Mr John Smith”,13返回:"Mr%20John%20Smith"

2017-04-15 23:40:55 337

原创 二叉搜索树的查找与删除一些基本操作

二叉搜索树:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树有个特点,最左的是最小的节点,最右的是最大的节点。 当我们把二叉搜索树进行中序遍历的时候,它是进行排序后的结果,所以我们也把二叉搜索树叫做排序二叉树。

2017-04-15 22:53:14 318

转载 STL之deque容器的剖析

说明:本文仅供学习交流,转载请标明出处,欢迎转载!       vector底层采用的是一个数组来实现,list底层采用的是一个环形的双向链表实现,而deque则采用的是两者相结合,所谓结合,并不是两种数据结构的结合,而是某些性能上的结合。我们知道,vector支持随机访问,而list支持常量时间的删除,deque支持的是随机访问以及首尾元素的删除。        deque是double

2017-04-15 00:36:21 403

原创 C++单例模式(懒汉和饿汉)与线程安全

单例:单例大约有两种实现方法:懒汉与饿汉。懒汉:故名思义,不到万不得已就不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化,饿汉:饿了肯定要饥不择食。所以在单例类定义的时候就进行实例化。(1)饿汉饿汉单例,即在最开始的时候,静态对象就已经创建完成;设计方法是类中包含一个静态成员指针,该指针指向该类的一个对象,提供一个公有的静态成员方法,返回该对象指针;为了使得

2017-04-14 15:56:48 6134 5

原创 面试3之确定其中一个字符串的字符重新排列后,能否变成另一个字符串

题目描述给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。测试样例:"This is nowcoder","is This nowcoder"

2017-04-14 13:50:02 838

原创 面试题2之翻转一个给定的字符串

请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。测试样例:"This is nowcoder"返回:"redocwon si sihT"#includeusing namespace std;#inclu

2017-04-13 18:43:01 1180

原创 面试题1之确定一个字符串的所有字符是否全都不同

请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。测试样例:"aeiou"返回:True"BarackObama"返回:Fa

2017-04-13 18:04:26 841

空空如也

空空如也

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

TA关注的人

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