自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TommyZht的专栏

Never Complaint,Just Enjoy Life

  • 博客(31)
  • 资源 (4)
  • 收藏
  • 关注

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

题目描述输入两个链表,找出它们的第一个公共结点。解题思路1、首先遍历两个链表,获得各自长度,得到长度差k2、让长的链表先走K 步3、两个链表同时向后走,同时判断是否相等,若相等则返回。时间复杂度:O(n),空间复杂度O(1)实现代码/*struct ListNode { int val; struct ListNode *next; L

2015-07-31 23:21:24 591

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

题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。    解题思路思路一:暴力搜索,一次判断每一个数,其之后的数有没有比它小的,若有则计数加一。时间O(n^2) 思路二:利用归并排序方法,在归并的时候,计算逆序对数目。具体过程看代码。 时间O(nlogn)实现代码

2015-07-31 10:48:24 660

原创 字符串反转之——手摇算法

手摇算法(也叫三次反转算法)看题:将字符串abcdefg,变成efgabcd,要求空间复杂度O(1)。解答:第一步:将子串abcd反转,变成dcba。源字符串变成dcbaefg第二步:将字串efg反转,变成gfe。源字符串变成dcbagfe第三步:将整个字符串dcbagfe反转,变成efgabcd。手摇算法常常被用来旋转字符串。同时,手摇算法也可以用来做原地归并

2015-07-31 10:05:50 1103

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

题目描述在一个字符串(1解题思路思路一:暴力解法,双重循环,依次判断每个字符出现的次数,直到找到第一个只出现一次的字符。时间复杂度O(n^2)。思路二:利用hash表来存储每个元素出现的次数,时间O(n) ,空间O(1)实现代码class Solution {public: int FirstNotRepeatingChar

2015-07-31 09:41:39 509

原创 面试题34_丑数

题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路思路一:从一开始,逐个判断是不是丑数,一直到找到第N个丑数。这种方法会做很多无用计算。把不是丑数的数也统统计算了一遍,会超时。思路二:可不可以只计算丑数?答案是

2015-07-31 09:36:19 638

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

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路这道题是一个排序问题,但是要自定义排序规则。需要注意的问题是:拼接起来的数可能超出整型数的表示范围,因此这也是一个大数问题。用字符串来表示解决溢出问题。实现代码c

2015-07-30 23:04:04 716

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

题目描述输入一个数组,有正数也有负数,求连续子数组的最大和。解题思路典型动态规划设f(i) 表示 以i位置结尾的子数组和,那么有:递推式:f(i) = max{ f(i-1) + array[i],  array[i]  }初值:f(0) = array[0]实现代码class Solution {public: int Find

2015-07-29 14:30:18 695

原创 面试题30——最小的k个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。解题思路思路1:按递增排序,然后输出前k个数,简单粗暴,时间复杂度O(nlogn)思路2:利用partition算法,找到第K大数,输出其左边K个数,时间复杂度O(n)思路3:开一个规模为K的数组,遍历原数组,若辅助数组未存满K个数,那么直接将遍历

2015-07-29 13:57:26 705

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

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。解题思路出现超过一半的数,一定是排好序的数组的中位数,即位置为 n/2 的数。找到这个中位数,然后,遍历一次,判断是否出现次数超过一半,若是,则返回true,否则,没有这

2015-07-29 09:21:53 1066

原创 面试题_28——字符串的全排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 解题思路这个题目就是求字符串的全排列,C++ STL有一个函数next_permutation() 可以求的字典序下一个排列。因此,利用该STL函数可以很方便就求出答案。如果要自己实现

2015-07-28 21:35:37 566

原创 面试题27_二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路采用中序遍历方法,注意指针指向。left指向小于当前值的数,right指向大于当前值的数。利用pLast来指向当前转换好的链表的最大值,即最后一个节点。首先转换左子树,其次,连接上根节点,之后,转换右子树。实现

2015-07-28 21:13:28 582

原创 面试题26_带随机指针的链表复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。解题思路思路一:分两步:第一步,遍历一遍链表,挨个复制;O(n)第二步,遍历链表,挨个找随机指针,因为定位随机指针要从头开始,所以每一个节点的随机指针都要从头开始找;时间复杂度是:O(n^2)思路二:分三步:第一步:挨个复制,链接在原

2015-07-28 20:31:27 944

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

题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解题思路当用先序遍历的方式访问某一结点时候,我们把该结点加入到当前路径,并计算累加和。若累加和刚好等于输入的整数,并且该节点为叶子节点,那么当前路径符合要求。如果当前节点不是叶子节点,那么继续访问它的子节点。当前

2015-07-28 13:53:04 933

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

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路首先明确基本概念,什么是二叉搜索树?二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小

2015-07-27 21:07:06 768

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

题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路:这道题考查二叉树的层次遍历。对于二叉树的先序遍历、中序遍历、后续遍历,我们都比较熟悉,用递归方法实现,代码也非常简单。对于层次遍历,我们在实现的时候,需要借助一个队列来辅助。依次将层次遍历的到的节点压入队列,再从队列中依次取出来打印。实现代码:/*struct TreeNod

2015-07-27 20:19:22 626

原创 面试题22_栈的压入和弹出序列

题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。解题思路:这道题考查对数据结构中栈的理解只有充分理解了栈的特性,才能够写出准确无误的代码。两个

2015-07-27 19:57:07 630

原创 面试题19_二叉树的镜像——剑指offer系列

题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。解题思路:二叉树的镜像,其实是一个二叉树的遍历,并且交换非叶子节点的 所有左右子节点。实现代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v

2015-07-25 15:09:12 733

原创 面试题10_二进制中1的个数

题目描述:请实现一个函数,输入一个整数,输出该整数中二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1。因此,若输入9,输出2。解题思路:思路1、右移输入的整数n,判断最右边是否是1,若是,则计数加一,直到n为0,这种思路对于正整数可行,但是对于负数,则会进入死循环。因为,负数右移,最高位补1 而不是0因此,这种方法不可取。思路2、左移数

2015-07-25 11:29:37 779

原创 面试题09_斐波那契数列及其变种详解——剑指offer系列

题目描述:写一个函数,输入n,求斐波那契数列的第n项。解题思路:这个题目很经典,但是要写好分析好与其相关的题目也不容易。后面介绍两个变形题目。思路1:递归递归的优点就是易于理解,代码简单。缺点就是,执行速度慢,有大量重复计算,容易造成栈溢出思路2:迭代迭代方方法是用空间换时间,速度比递归快。通常情况下代码要长一点。思路3:公式法

2015-07-25 10:57:48 2242

原创 面试题08_旋转数组的最小数字——剑指offer系列

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如:数组{3, 4, 5, 1 , 2} 是 数组{1,2,3,4,5}的一个旋转,该数组最小的数是1.我们要做的就是找到这个旋转后数组的最小数。解题思路:思路1:直接遍历数组,找到最小的数,简单粗暴,时间复杂度O(n),空间复杂度O(

2015-07-25 10:28:32 1055

原创 面试题07_用两个栈实现队列——剑指offer系列

题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和 deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。解题思路:栈的特性是后进先出,而队列的特性是先进先出。因此,用两个栈来模拟队列的功能,在输入数据的时候,一次压入栈A,当要输出数据的时候,则将栈A的数据全部依次弹出,压入栈B 。这样,栈B 栈顶就是队列头

2015-07-25 09:58:58 905

原创 找中位数O(n)算法

题目描述:给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。样例给出数组[4, 5, 1, 2, 3], 返回 3给出数组[7, 9, 4, 5],返回 5解题思路:利用快排划分的思想,递归处理。参考代码:public class Solution {p

2015-07-21 10:09:29 16789 3

原创 面试题06_重建二叉树——剑指offer系列

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},输出它的头节点。解题思路:在二叉树先序序列中,第一个节点就是根节点。在中序序列中找到该根节点,那么以该根节点为轴将中序序列分为左右两个部分。左边

2015-07-20 23:11:35 645

原创 OPNET中业务设置——学习笔记

OPNET中的业务设置opnet在项目编辑器中要完成如下四个步骤:创建网络模型——>选择统计量 ——> 运行仿真 ——>查看和分析结果网络由很多部分组成,在搭建好网络模型之后,需要指定网络中使用的业务。OPNET软件提供以下3种类型的业务:明确产生的业务。由用户建立、可定义大小,根据选定的分布产生每时间单位内的呼叫数目。关键步骤是:配置应用定

2015-07-20 12:08:05 3432

原创 OPNET通信仿真机制解析——学习笔记

三层建模机制系统建模与仿真工程分为3个阶段建立模型——>数据采集和仿真——>结果分析OPNET分层建模机制,提供三个层次模型:进程模型——以状态机来描述协议;节点模型——由相应的协议模型构成,反映设备特性;网络模型——表现网络的拓扑结构;网络域作用是定义通信网络的拓扑结构。网络域的通信实体为节点,由节点编辑器设计和开发。通信节点:固定

2015-07-19 22:09:19 7126

原创 先序非递归遍历二叉树解析——面试高频数据结构

一、基本概念二叉树是笔试面试中高频数据结构。而二叉树的遍历是解决一切二叉树题目的基础。因此,有必要熟练掌握二叉树的遍历方法,包括递归方法 和 非递归方法。由于递归方法比较简单,因此,这里我们着重来学习二叉树的非递归遍历方法。首先明确,二叉树的遍历方法按照访问根节点的次序不同,可以分为如下三种:先序遍历、中序遍历、后序遍历。先序遍历,即先访问根节点,然后再分别访问

2015-07-17 22:45:39 1191

原创 面试题04_替换空格_剑指Offer系列

题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路这种题目从前往后扫描的话,需要移动多次,这种情况下从后往前扫描。首先扫描一遍,找到空格的个数,算出需要添加多少个20%,即替换后的字符串的长度 = 原字符串长度 +  空格数*2准备两个指针一个

2015-07-17 15:05:28 629

原创 面试题03_二维数组中查找_剑指offer系列

题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:这是一道考查二维数组的理解和编程能力的题。在二维数组在内存中是连续存储的。在内存中从上到下存储各行元素,在同一行中按照从左到右存储。因此可以按照行号和列号来计算出相对数组首部的位置。

2015-07-17 14:44:43 618

原创 多态性与虚函数——C/C++学习笔记

多态性(polymorphism)即:向不同对象发送同一个消息,不同的对象在接收时候会产生不同行为。所谓消息,就是函数调用。C++中多态性就是:具有不同功能的函数可以有相同的函数名称。即实现用同一个函数名调用不同的函数内容。C++多态性分为:静态多态性 和 动态多态性静态多态性:通过函数重载或者运算符重载实现,在编译阶段即知道函数的全

2015-07-16 20:58:39 1186

原创 opnet仿真错误:无法打开源文件oms_string_support.ex.tmp.c

错误提示:oms_string_support.ex.tmp.cc1 : fatal error C1083: 无法打开源文件: “C:\Users\zhtao\op_admin\tmp\oms_string_support.ex.tmp.c”: No such file or directory今天晚上被这个错误给搞醉了。。。初次接触opnet,首先安装了14.5破解版本

2015-07-12 22:46:41 3174

原创 交错字符串——动态规划

题目描述:给定三个字符串A, B, C,判断C是否由A和B交错构成。交错构成的意思是,对于字符串C,可以将其每个字符标记为A类或B类,使得我A类的每个字符顺序构成了A字符串,B类的每个字符顺序构成了B字符串。如:对于A=”rabbit” B=”mq”, ”rabmbitq”是由A和B交错构成的,但”rabbqbitm”不是由A和B交错构成。解题思路:1、直接顺序比较

2015-07-09 10:14:35 2555

ACM算法锦集

ACM算法锦集详述了ACM的常用算法,适合ACM入门学习,其中算法适合ACM队员练习默写

2015-06-18

leetcode全部答案

leetcode刷题全部答案,有全部详细的代码,刷题必备

2015-05-18

Arduino原理图

开源硬件arduino的原理图 玩arduino的朋友必备

2015-05-18

空空如也

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

TA关注的人

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