E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
offer-算法之道
剑指
offer-
面试题18.树的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下:1structBinaryTreeNode 2{ 3intm_nValue; 4BinaryTreeNode*m_pLeft; 5BinaryTreeNode*m_pRight; 6}; 求子树的思路大概是这样的:1.判断树A和树B是否有相同的根节点2.如果存在则判断A的子树是是否和B的结构相同3. 如果不存在则A继续向下遍历
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题17.合并两个排序的链表
题目:输入两个递增的排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的。例如链表1链表2合并为链表3.1List1:1->3->5->7 2 3List2:2->4->6->8 4 5List3:1->2->3->4->5->6->7->8链表结点定义如下:1structListNode 2{ 3intm_nValue; 4ListNode*m_pNext; 5} 其实我们可以简单梳
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题16.反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的头结点链表结点定义如下:1structListNode 2{ 3intm_nKey; 4ListNode*m_pNext; 5} 其实反转链表主要是链表指针的操作,一定要很清楚才行。其实在面试题5,从尾到头打印链表的第一种方式已经实现了这种方式: 这里在梳理下反转链表的过程:比如链表:1->2->3->4->5->61.定义三个指针
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题15.链表中倒数第k个结点
题目:输入一个链表,输出该链表的倒数第K个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个节点。例如有一个链表有6个节点,从头节点开始他们的值依次是1,2,3,4,5,6.这个链表的倒数第三个节点是值为4的节点。 这个题目常规情况下我们都是考虑先从链表的头遍历到链表的尾,然后后退k步取倒数第k个节点的值。 然而我们也可以这样考虑先遍历一遍链表计算出链表的长度N,要取出倒
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题14.调整数组顺序使奇数位于偶数的前面
题目:输入一个整数数组,实现一个函数来调整该数组中的数字的顺序,使得所有的奇数位于数组的前半部门,所有的偶数位于数组的后半部门。 这一题一看其实是很简单的,当然在不考虑效率的情况可以这样考虑我们将数组从前开始索引只要发现偶数这将偶数取出来并且将偶数后面的元素全部前移一个然后将偶数插入到最后,这样扫描一遍之后就将偶数全部放在了后半部门,奇数放在了前半部分。但是效率不好每次遇到偶数都要移动偶数后面的所
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题13.在O(1)时间删除链表节点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。链表节点与函数的定义如下。 通常我们删除某个节点都是从头开始遍历到需要删除节点的前一个节点。然后使得该节点的next指向删除节点的next即可,这样看来删除一个节点的复杂度为O(n)然而我们其实遍历的目的只是想获取想要删除节点的前一个节点。 那么我们可以这样考虑:我们把要删除节点下一个节点的值赋值到当前节点,然后将当
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题12.打印1到最大的n位数
题目:输入数字n,按照打印出从1最大的n位10进制数。比如3,则打印出1、2、3一直到最大的3位数即999 1.你觉得如果面试会有这么简单的题,那只能说明你---太天真。2.n=3尚可,如果n=30300呢有这样的内置数据类型能包括这么大的数吗?3.说白了,这道题就是考察用字符串模拟大数。 算法思想如下:1.分配大小为n+1个字符的内存初始化为'0'最后一个'\0'2.模拟加法,每一位字符上的范
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题11.数值的整数次方
题目:实现函数doublePower(doublebase,intexponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数的问题. 这道题看似很简单:然而需要考虑的方面到不少:1.如何处理指数为负数,将负数当成正数处理对结果求倒2.当指数为负数的时候并且底数为0的时候如何处理3.当指数为0底数为0的情况 这里我们这样考虑,把底数为0的所有输入处理为无效输入,返回0
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题10:二进制中1的个数
题目:请实现一个函数,输入一个函数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 这道题最典型的方法就是用移位统计,就比如统计9的二进制1个数:1.9的二进制位1001,9-1的二进制位1000.2.两者做与运算,结果为1表示最后一位为1,否则为03.将1001向右移位一位然后重复上述步骤直到该数字为0停止 代码实现如下:1#includ
u013018721
·
2016-04-07 19:00
剑指offer
剑指
offer-
面试题9.斐波拉契数列
题目一:写一个函数,输入n,求斐波拉契数列的第n项。斐波拉契数列的定义如下:1{0n=0; 2f(n)={1n=1; 3{f(n-1)+f(n-2)n>1; 斐波拉契问题很明显我们会想到用递归来解决:1longlongFibonacci(unsignedintn) 2{ 3if(n==0) 4return0; 5if(n==1) 6return1; 7 8if(n>1) 9returnFibona
u013018721
·
2016-04-07 19:00
剑指offer
剑指
offer-
面试题8.旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数据的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 这道题可以使用类似于二分查找的思想,算法思路如下:1.假设有一个旋转数组A,我们设两个索引p1,p22.p1指向为数组第一个元素,p2指向为数组最后一个元素3.取p3为数组中的中间元
u013018721
·
2016-04-07 19:00
剑指offer
剑指
offer-
面试题6.重建二叉树
题目:输入某二叉树的前序遍历和中序遍历结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如图所示的二叉树并输出它的头结点。二叉树的定义如下:1structBinaryTreeNode 2{ 3intm_nValue; 4BinaryTreeNode*m_pLef
u013018721
·
2016-04-07 19:00
面试题
剑指offer
剑指
offer-
面试题5.从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 刚看到这道题的小伙伴可能就会想,这还不简单,将链表反转输出。但是这种情况破坏了链表的结构。如果面试官要求不破坏链表结构呢,这时候我们就想到了一种数据结构---栈 当我们从前往后遍历链表逐个压栈然后遍历结束后再逐个出栈。 首先我们先来用第一种方式实现:1#include 2usingnamespacestd; 3 4structLis
u013018721
·
2016-04-07 19:00
面试题
剑指offer
剑指
offer-
面试题4.替换空格
题目:请实现一个函数,把字符串中的每个空格都替换成"%20"。例如输入"Wearehappy."则输出"We%20are%20happy." 这道题一看到就能想到直接从前到后遍历字符串,当遇到空格时候先将空格后面的字符串中每个字符向后移动两个位置,然后再把空格及空格之后的两个字符替换为"%20" 剑指Offer书上这样说到:假设字符串长度为n,每遇到一个空格,需要移动后面的O(n)个字符,那么对于
u013018721
·
2016-04-07 19:00
面试题
剑指offer
剑指
offer-
面试题3.二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断该数组中是否有该整数。 算法流程如下:比如一个二维数组array:11289 2 324912 4 5471013 6 7681115 1.这个二维数组的左上角是最小的数据,右下角为最大的数,首先判断查找的数是否numberarray[1][1]2.
u013018721
·
2016-04-07 19:00
面试题
剑指offer
剑指
offer-
面试题2.实例Singleton模式
题目:设计一个类,我们只能生成该类的一个实例这道题显然是对设计模式的考察,很明显是单例模式。什么是单例模式呢,就是就像题目所说的只能生成一个类的实例。那么我们不难考虑到下面几点:1.不能new多个对象,那么必然该类的构造函数是私有的2.类对象只有一个,那么必然该对象只能有一个私有的静态成员变量,该成员变量为类实例或者类实例的指针。3.但是我们同时还要考虑到如果获取这个唯一对象实例,那么该类必然有一
u013018721
·
2016-04-07 19:00
面试题
剑指offer
剑指
offer-
面试题1:赋值运算符函数
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数classCMyString { public: CMyString(char*pData=NULL); CMyString(constCMyString&str); ~CMyString(void); private: char*m_pData; };首先在解答这道题目之前,先要作一些说明:1.任何类都是默认的重载赋值操作符
u013018721
·
2016-04-07 18:00
C++
面试题
剑指
offer-
面试题31:连续子数组的最大和
这道题以前详细总结过,不再重复了,唯一一点需要改进的是代码的鲁棒性,处理无效输入。采取全局变量的方式,用变量记录输入是否有效,有效的时候输出最大值。算法分析见:http://blog.csdn.net/moses1213/article/details/50499638
moses1213
·
2016-04-07 11:00
教你如何迅速秒杀99%的海量数据处理面试题
作者:July出处:结构之法
算法之道
blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名
qq100440110
·
2016-04-06 22:00
大数据
剑指
offer-
面试题30:最小的K个数
题目:输入n个数,找出其中最小的K个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1,2,3,4。思路:这道题目是典型的topK问题。两种方法:(1)如果允许改变数列,半快速排序,是基准值正好为第K个数,那么基准值左边的都是小于它的,即可得到最小的K个数(求最大的过程类似),时间复杂度O(n)。(2)不允许改变数列,采用维护数组的方法,建立一个最大堆。遍历数列,如果数字小
moses1213
·
2016-04-06 21:00
剑指
offer-
面试题29:数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。思路:如果数组是已排序的,可以很容易实现次数的统计,排序的算法时间复杂度至少是O(nlogn)。这题注意到题目的特殊性,出现次数超过一半,那么排序后中位数肯定就是这个数,我们只要求出最小的n/2个数,不关
moses1213
·
2016-04-06 10:00
剑指
offer-
面试题28:字符串的排列
题目:输入一个字符串,打印出该字符串中字符放入所有排列。例如输入字符串abc,则打印出字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。思路:全排列的问题实际就是交换问题。把问题划分成两个部分,第一个字符和后面的部分,所以这个问题分为两个步骤:(1)考虑第一个字符的所有可能情况,将第一个字符和后面的所有字符交换;(2)考虑第一个字符后面的整体部分,那么这部分又可
moses1213
·
2016-04-04 11:00
剑指
offer-
面试题27:二叉搜索树与双向链
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点只能调整树中结点指针的指向。思路:对于二叉搜索树,根结点的左子树都比它小,右子树都比它大,如果按照中序遍历那么结点就是排序的,问题的关键是如何修改指针指向。假设左右子树已经排序,那么只要将左子树的尾结点连接上根结点,根结点连接上右子树就可以了。关于怎么连接左右子树,还是有一点技巧的。我们每次连接完成之后都更新
moses1213
·
2016-04-03 20:00
剑指
offer-
面试题26:复杂链表的复制
题目:请实现函数ComplexListNode*Clone(ComplexListNode*pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL。结点的C++定义如下:structComplexListNode{int m_nValue;ComplexListNod
moses1213
·
2016-04-02 20:00
剑指
offer-
面试题25:二叉树中和为某一值的路径
题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的形成一条路径。思路:对于每棵子树,它都是一个求解树中结点值的和为输入整数的所有路径的问题,整数为去除它的父节点的和之后新的值,所以很明显可以用递归的方法求解。那么对于每个结点,怎样判断是否已经是要求的路径呢?题目要求和为整数且是叶结点。作者给出的思路简单粗暴,那就是遍历,不管加上当
moses1213
·
2016-04-02 16:00
剑指
offer-
面试题24:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。思路:如果熟悉二叉搜索树的特征这题就不难解了。复习一下二叉搜索树。对于二叉搜索树,若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;那么后序遍历的结果就是:根结点排在序列最末
moses1213
·
2016-04-01 22:00
剑指
offer-
面试题23:从上往下打印二叉树
题目:从上往下打印二叉树的结点,同一层的结点按照从左到右的顺序打印。思路:先打印根结点,那么为了打印根结点的两个子结点,需要一个容器将两个子结点保存起来。然后打印左子树,过程和打印根结点类似,也需要将左子树的左右子结点保存起来。这时候容器里存有根结点的的右子树和左子树的两个子结点。接下来要打印右子树了,需要从容器里取出右子树,由于右子树相比左子树的两个子结点先入容器,先入先出,所以这是一个队列结构
moses1213
·
2016-04-01 19:00
剑指
offer-
面试题22:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设入栈的所有数字均不相等。思路:用一个栈来模拟入栈过程。如果弹出序列的元素a不等于栈顶,那么说明它还没有入栈,从压入顺序里将元素a以及它之前的元素全部入栈。如果所有压入顺序中的元素都已入栈还是没有在栈顶找到元素a,说明弹出序列是错误的。如果元素a刚好等于栈顶,直接出栈。最后的过程应该是所有元素都出栈而且弹出
moses1213
·
2016-04-01 11:00
剑指
offer-
面试题21:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1).思路:时间复杂度O(1)?刚开始看到觉得不可能实现,对栈进行排序?那还能满足先入后出吗?所以对原始栈进行操作是不可能的了。那么引入一个新的数据结构,来记录栈中的最小值。如果这种数据结构中只保存栈中的最小值,那么栈弹出一个元素呢,新的栈的最小值是多少?很明显这
moses1213
·
2016-03-31 20:00
剑指
offer-
面试题20:顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。思路:顺时针打印,打印最外层一圈后再打印向内收缩的一圈,这个过程中起点位置发生了变化。因此可以抽象化打印一圈的过程,循环打印。循环执行的条件?剑指offer里指出当columns>startX*2并且rows>startY*2,循环继续。这一点不好找到,似乎只能通过归纳得出。打印一圈的过程,可以分为四部:第一步从左到右打印一行,第
moses1213
·
2016-03-31 17:00
剑指
offer-
面试题19:二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。思路:镜像即关于一条竖直线对称,可以发现镜像后所有左右子树均互换位置。从根结点的左右子树开始交换它们的位置,那么对于左右子树来说他们成了新的根结点,镜像的过程和上一步完全一样,所以这是一个递归的过程。同时递归在本质上就是一个栈结构,也可以用栈来实现。递归版本:voidMirrorRecursively(BinaryTreeNode*pNod
moses1213
·
2016-03-30 21:00
剑指
offer-
面试题18:树的子结构
题目:输入两颗二叉树A和B,判断B是不是A的子结构。思路:第一步在树中找到和B的根结点的值一样的结点R,第二步再判断树A中以R为根结点的子树是不是包含B一样的结构。boolHasSubTree(BinaryTreeNode*pRoot1,BinaryTreeNode*pRoot2) { boolresult=false; if(pRoot1!=NULL&&pRoot1!=NULL) { if(pR
moses1213
·
2016-03-30 16:00
剑指
offer-
面试题17:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。思路:每次从两个链表中选取较小的结点作为新链表的结点,那么这里有两种方法,循环或者递归。(1)循环,每次取出两个链表中较小的结点插入新链表,到达其中一个链表的尾结点时,另外一个链表的其余部分直接接在这个尾结点上。(2)从两个链表中选取较小的表头作为新链表的表头,那么剩下的问题就是两个新的已排序的链表的合并,只不过其
moses1213
·
2016-03-30 09:00
剑指
offer-
面试题16:反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。思路:如果全部改变指针指向,则可以反转链表,那么对当前结点,要指向它前面的结点,同时它的下一节点要在下一步中指向自己,所以函数没执行一步,需要前一结点和下一结点,防止链表断裂。当前结点的下一结点为NULL时,表明已经到尾结点,执行过程结束,同时将尾结点置为新的表头。ListNode*ReverseList(ListNod
moses1213
·
2016-03-29 15:00
剑指
offer-
面试题15:链表中倒数第K个结点
题目:输入一个链表,输出该链表中倒数第K个结点。为了符合大多人的习惯,本题从1开始计数,即链表的尾结点是倒数第一个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6.这个链表的倒数第三个结点是值为4的结点。思路:这个题目我自己也实现了一遍,采用的方法是从头开始遍历链表,同时每次判断当前结点的后面第k-1个结点。如果后面的结点为NULL,则说明链表长度小于k,返回错误。如
moses1213
·
2016-03-29 11:00
剑指
offer-
面试题14:调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路:这道题很简单,使用首尾两个指针,遇到偶数在前奇数在后的情况交换就可以了,唯一的需要注意的是边界条件不要弄错了。作者在这里其实提醒程序员要注意的是程序的可扩展性,实际上就是把判断条件写成一个函数,然后将函数指针作为一个参数传递进去。voidReorder(int*pData
moses1213
·
2016-03-28 19:00
剑指
offer-
面试题13:在O(1)时间删除链表结点
题目:给定单向链表的头指针和下一个结点指针,定义一个函数在O(1)时间删除该结点。思路:一般来说删除链表的方法都是通过找出要删除结点的前一个结点和后一个结点,将前结点指向后结点(注意链表不要断开),然后删除结点。后结点可以直接获取,但是前结点只能通过遍历链表的方式,时间复杂度为O(n)。如果把要删除的结点的后一个结点值覆盖到当前结点,同时把当前结点指向后结点的下一结点,删除后结点,也能实现删除结点
moses1213
·
2016-03-28 18:00
剑指
offer-
面试题12:打印1到最大的n位数
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999.解法:这道提的陷进在于没有规定最大的n位数的范围,会不会溢出,也就是说我们要考虑大数问题。最常用也是最容易的方法是用字符串或者数组去表达大数。boolincrement(char*number) { boolIsOverFlow=false; intTakeOver=0; intlen
moses1213
·
2016-03-27 20:00
剑指
offer-
面试题11:数值的整数次方
这一节还是挺有收获的,作者首先讲了代码的规范性和完整性。规范性即清晰地书写、清晰的布局、合理的命名,我想这也是对一个优秀的程序员的基本要求。代码的完整性里面提到了几个以前没听说过的概念。确保代码完整性的3个方面:功能测试、边界测试、负面测试。功能测试即考虑普通功能的测试用例,写出的代码要能够满足面试官要求的基本功能,同时考虑问题要全面,不能遗漏。边界测试即程序中可能存在递归和循环。如果是循环,那么
moses1213
·
2016-03-27 18:00
剑指
offer-
面试题4
package offer; public class Problem04 { /** * 把字符串中的每个空格替换成“%20”。例如:输入“We are happy”,则输出“We%20are%20happy”。 */ public static void main(String[] args) { String str = "We are happy"; System.out.print
十一11
·
2016-03-25 18:00
剑指
offer-
面试题9:斐波那契数列
题目一:写一个函数,输入n,求斐波那契(Fabonacci)数列的第n项。斐波那契数列的定义如下:效率很低的解法:递归longlongFibonacci(unsignedn) { if(n usingnamespacestd; longlongmartrix[4]={1,1,1,0}; longlong*multiply(longlong*martrixA,longlong*martrixB)
moses1213
·
2016-03-22 22:00
剑指
offer-
面试题8:旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.思路:旋转之后的数组实际上可以划分成两个排序的子数组,最小数是两个子树组的分界线,试着用二分查找的方法来寻找最小数。使用指针指向数组的第一个元素和最后一个元素,求两个指针的中值,如果中
moses1213
·
2016-03-20 20:00
剑指
offer-
面试题7:用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appenTail和deleteHead,分别完成在队列尾部插入结点和队列头部删除结点的功能。解法:因为栈是后入先出,而队列是先入先出。即出栈的顺序是和入栈的顺序颠倒的,由负负得正很容易想到两个栈可以实现按原先的顺序输出。算法设计:(1)入队的时候总是插入stack1的尾部; (2)出队的时候,如果stack2不为空,直
moses1213
·
2016-03-17 11:00
剑指
offer-
链表从后往前打印
从尾到头打印链表题目描述输入一个链表,从尾到头打印链表每个节点的值。输入描述:输入为链表的表头解法一:(递归)classSolution{ public: vectorprintListFromTailToHead(structListNode*head){ vectorre; if(head==NULL) { returnre; } if(head->next==NULL) { re.push_
ivysister
·
2016-03-16 14:00
链表
打印
剑指offer
剑指
offer-
两个链表的第一个公共节点
题目延伸:编程之美中的求两个节点是否相交:将两个节点串在一起,若有节点,串在一起的节点就会出现环,利用一二不长不等,两个节点在环中必然相遇。本题描述:输入两个链表,找出它们的第一个公共结点。分析:一个简单的方法是:首先遍历两个链表得到它们的长度,就能知道哪个链表比较长,以及长的链表比短的链表多几个节点。在第二次遍历的时候,先在较长的节点上走若干步,接着同时在两个链表上遍历,找到的第一个相同的节点就
SoundSlow
·
2016-03-15 11:00
java
算法
字符串
遍历
剑指
offer-
数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数分析(转载):举例说明例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。解题思路利用改进的二分算法。 如何用二分查找算法在数组中找到第一个k,二分查找算法总是先拿数组中间的数字和k作比较。如果中间的数字比k大,那么k只有可能出现在数组的前半段,下一轮我们只在数组的前半段查找就可以了。如果中间的数字比k小,
SoundSlow
·
2016-03-15 10:00
java
算法
剑指
offer-
第一次只出现一次的字符位置
题目描述在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串,返回-1。位置索引从0开始分析:1》先遍历一次,利用哈希表记录每一个字符的数目 2》在遍历一次,找到字符数目等于1的字符位置细节:字符(char)是一个长度为8的数据类型,共有256种可能,数组为256大小,字符个数太多需要用longpublicclassSolution{ pub
SoundSlow
·
2016-03-15 00:00
java
字符串
哈希表
剑指
offer-
丑数
题目描述把只包含因子2、3和5的数称作丑数(UglyNumber)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路:(时间换空间)我们考虑一个数组,数组存储的是当前的丑数,以后的每个丑数,都是用之前的数组的元素相乘的来的。接下来就是如何得到后面的丑数并保证它是有序的。可以想到,数组的第一个元素是1,1与235分别相乘,可以得到
SoundSlow
·
2016-03-14 23:00
java
剑指
offer-
面试题6:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。解:算法的关键是找出根节点的左子树和右子树。如果算法能求出根节点和左右子树,剩下的递归调用这个算法就可以了。前序遍历的第一个值就是根节点,而中序遍历中左子树就是根节点前面的部分,右子树就是根节点右边的部分,问题得解。下面是代码及测试部分。#include usingnamespace
moses1213
·
2016-03-14 16:00
SVM 学习笔记
主要的参考内容:1.机器学习实战2.支持向量机通俗导论(理解SVM的三层境界)-结构之法
算法之道
-博客频道-CSDN.NET http://blog.csdn.net/v_july_v/arti
mdcddn1_e
·
2016-03-14 00:00
机器学习
上一页
18
19
20
21
22
23
24
25
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他