剑指offer
文章平均质量分 54
Python实现《剑指offer》中的算法题
Jinlong_Xu
talk is cheap, show me code!
展开
-
轻松搞定面试中的二叉树题目
版权所有,转载请注明出处,谢谢!http://blog.csdn.net/walkinginthewind/article/details/7518888树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关转载 2017-07-29 00:11:57 · 511 阅读 · 0 评论 -
快速排序算法里的partition函数
快速排序算法里的partition函数用来解决这样一个问题:给定一个数组arr[]和数组中任意一个元素a,重排数组使得a左边都小于它,右边都不小于它。代码实现:// arr[]为数组,start、end分别为数组第一个元素和最后一个元素的索引 // povitIndex为数组中任意选中的数的索引int partition(int arr[], int start, int en原创 2017-08-19 11:15:42 · 1735 阅读 · 0 评论 -
【剑指offer】面试题 39:数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。时间限制:1秒 空间限制:32768K 热度指数:101574本题知识点: 数组思路数组中出现次数超过了一半,说明这个数字出现的次数比其他原创 2017-08-19 20:08:54 · 397 阅读 · 0 评论 -
阿里巴巴2017实习生招聘在线编程测验(算法工程师-机器学习)
题目:小明向他的女朋友仙仙求婚,在求婚戒指上刻了一个大大的爱心。仙仙看到爱心想考验一下小明,出了一道题。方程(x2+y2−1)2−x2y2=0能画出一个美丽的爱心,现在给定一个点(x,y),其中,X∼N((μ1,σ21),Y∼N((μ2,σ22),这个点在这个爱心里面的概率是多少,精确到0.1(小数点后保留一位小数,比如0.1, 0.2等)#include #include usin转载 2017-08-21 10:05:20 · 2315 阅读 · 0 评论 -
【剑指offer】面试题 40:最小的 k 个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。时间限制:1秒 空间限制:32768K 热度指数:126946本题知识点: 数组参考代码class Solution {public: vector GetLeastNumbers_Solution(vector原创 2017-08-21 10:21:22 · 383 阅读 · 0 评论 -
【剑指offer】面试题 42:连续子数组的最大和
题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或者连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。时间限制:1秒 空间限制:32768K热度指数:73009本题知识点: 数组思路用sum记录和最大,tempsum记录累加值。基本思想:对于一个数A, 若A的左边累加值为非负,那么加上原创 2017-08-21 16:51:05 · 364 阅读 · 0 评论 -
【剑指offer】面试题 43 : 1~n 整数中 1 出现的次数
题目描述输入一个整数 n,求1~n 这 n 个整数的十进制表示中1出现的次数。例如,输入12, 1~12 这些整数中包含1的数字有1、10、11、12,1 一共出现了 5 次。时间限制:1秒 空间限制:32768K 热度指数:57580思路非常直观的方法。每次通过对10取余,判断整数的个位数是不是 1 。如果这个数字大于 10,原创 2017-08-21 17:08:29 · 381 阅读 · 0 评论 -
【剑指offer】面试题 45:把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。时间限制:1秒 空间限制:32768K 热度指数:74280本题知识点: 数组思路对vector容器内的数据进行排序。将 a 和 b 转为 string 后,若 a +原创 2017-08-22 11:35:32 · 432 阅读 · 0 评论 -
【剑指offer】面试题 49:丑数
题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。时间限制:1秒空间限制:32768K热度指数:78646本题知识点: 数组思路将每一个丑数保存下来,用空间换时间的算法。下一个丑数是由原创 2017-08-22 19:35:15 · 460 阅读 · 0 评论 -
【剑指offer】面试题 50:第一个只出现一次的字符
题目描述在一个字符串(1时间限制:1秒 空间限制:32768K 热度指数:89137本题知识点: 字符串思路算法:利用hash表就可以解。哈希表的键值是字符,值是该字符出现的次数。 扫描两次字符串,第一次扫描字符串时,每扫描一个字符,就在哈希表的对应项中把次数加 1。 第二次扫描字符串时,每扫描一个字符,就可以得到该字符出现的次数。对于次数为原创 2017-08-24 10:57:28 · 361 阅读 · 0 评论 -
【剑指offer】面试题 53:数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。时间限制:1秒 空间限制:32768K 热度指数:71223本题知识点: 数组参考代码class Solution {public: int GetNumberOfK(vector data ,int k) { return count(data.begin(),原创 2017-08-26 13:30:49 · 437 阅读 · 0 评论 -
【剑指offer】面试题 25:合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。时间限制:1秒 空间限制:32768K 热度指数:125690本题知识点: 链表思路合并是先从两个链表的头结点开始,先比较两个头结点的值大小,若链表 1 的头结点的值小于链表 2 的头结点的值,所以链表 1 的头结点的值将会是合原创 2017-07-22 10:38:19 · 446 阅读 · 0 评论 -
【剑指offer】面试题 26:树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)时间限制:1秒 空间限制:32768K 热度指数:125354思路对于两棵二叉树来说,要判断B是不是A的子结构,首先第一步在树A中查找与B根节点的值一样的节点。通常对于查找树中某一个节点,我们都是采用递归的方法来遍历整棵树。第二步就是判断树A原创 2017-07-22 12:35:53 · 313 阅读 · 0 评论 -
【剑指offer】面试题 29:顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.时间限制:1秒 空间原创 2017-07-22 17:54:47 · 298 阅读 · 0 评论 -
经典算法实现——字符串(一)
这篇文章主要介绍字符串相关的题目。处理字符串操作相关问题时,常见的做法是从字符串尾部开始编辑,从后往前逆向操作。这么做的原因是因为字符串的尾部往往有足够空间,可以直接修改而不用担心覆盖字符串前面的数据。摘自《程序员面试金典》问题描述:对于一个给定的源字符串和一个目标字符串,你应该输出在这个源字符串中匹配到的第一个索引。如果源字符串中不存在目标字符串,就返回-1.例如:源字符原创 2017-04-02 22:10:46 · 1974 阅读 · 0 评论 -
【京东—数据挖掘/深度学习】电话面试——2017/04/11
昨天下午六点多接到京东成都研究院HR的电话通知,告诉我,明天(11号)下午四点到六点之间会有电话面试,要我提前做好准备。之前投的时候,意向岗位是数据挖掘岗位。没想到居然过了简历关,进入到了电面。第一次面试自然要好好准备一下。就回顾一下常见的数据挖掘的算法,还有之前做过的项目。觉得自己准备的差不多了,到了四点就一直守在电话前等着,一直没来电话,我就等到五点十分左右,然后来了电话。原创 2017-04-11 18:37:48 · 2873 阅读 · 0 评论 -
【网易游戏——数据分析/数据挖掘/BI】暑期实习生笔试(中大专场)——2017/04/13
今天下午参加了网易游戏春招/实习生招聘(中大专场)的笔试,同时也打算记录一下自己做到的笔试题,在这里分享给大家。 首先要吐槽的一点是,中大的限外令真的很严。还好我带校园卡了,同学忘拿了,直接回宿舍拿的。同时,即使是网易游戏的工作人员也不得不打报告,上面同意才放进来的。第二点,为啥网易游戏的数据挖掘居然不考算法?在这里,提醒各位想做数据挖掘算法的小伙伴,不太建议投网易游戏的原创 2017-04-13 22:47:35 · 9261 阅读 · 0 评论 -
【剑指offer】面试题 4:二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间限制:1秒 空间限制:32768K 热度指数:315456本题知识点: 查找思路:将二维数组当成矩阵,从右上角出发,比较目标数字与当前数字的大小。如果目标原创 2017-06-20 23:53:59 · 553 阅读 · 0 评论 -
【剑指offer】面试题 5:替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。时间限制:1秒 空间限制:32768K 热度指数:283203本题知识点: 字符串思路:第一种,简单粗暴,直接遍历,从前往后替换。遇到空格,就替换,同时将后面的所有字符都往后原创 2017-06-21 00:20:09 · 545 阅读 · 0 评论 -
【剑指offer】面试题 6:从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。时间限制:1秒 空间限制:32768K 热度指数:243238本题知识点: 链表思路:第一种,从尾到头打印每一个节点的值,那么肯定要先遍历整个链表,再从尾部开始打印。这个过程是典型的“先入后出”,所以考虑用栈实现。遍历的时候,每遍历一个节点就放到栈中。遍历结束后,再从栈顶开始打印输出节点的值原创 2017-06-21 13:40:33 · 675 阅读 · 0 评论 -
【剑指offer】面试题 7:重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。时间限制:1秒 空间限制:32768K 热度指数:162011思路:由前序遍历可以知道二叉树的根节点,而后序原创 2017-06-25 16:27:35 · 558 阅读 · 0 评论 -
【剑指offer】面试题 8:二叉树的下一个节点
题目描述给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。思路以二叉树的中序遍历是 {d, b, h, e, i, a, f, c, g} 为例。如果一个节点有右子树,那么按照中序遍历的规则,它的下一个节点就是它的右子树的最左子节点。如果一个节点没有右子树,如果节点是其父节点的左子原创 2017-06-25 22:17:48 · 474 阅读 · 0 评论 -
【剑指offer】面试题 9:用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。时间限制:1秒 空间限制:32768K 热度指数:108908本题知识点: 队列 栈参考代码:# -*- coding:utf-8 -*-class Solution: def __init__(self): self原创 2017-06-25 23:41:07 · 397 阅读 · 0 评论 -
【剑指offer】面试题 10:斐波那契数列及其推广
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n时间限制:1秒 空间限制:32768K 热度指数:153571思路1、用递归来实现,但是递归存在调用栈溢出的风险。调用栈溢出是因为递归的计算中,每次函数调用在内存栈中分配空间,而每个进程的栈的容量都是有限的。原创 2017-06-29 15:59:57 · 544 阅读 · 0 评论 -
2017年华为实习生笔试题
第一题: 输入:一个整数n(n可能很大) 输出:例如 n = 789 ; f(n) = 7+8+9 = 24; f(n) = 2+4 = 6;此时f(n)只有1位,输出f(n) 样例输入:4546313123 样例输出:5 我的答案: package 华为笔试;转载 2017-07-05 09:29:45 · 911 阅读 · 0 评论 -
【剑指offer】面试题 11:旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。时间限制:3秒 空间限制:32768K 热度指数:154210本题知识原创 2017-07-05 19:55:06 · 438 阅读 · 0 评论 -
【剑指offer】面试题 15:二进制中 1 的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。时间限制:1秒 空间限制:32768K 热度指数:105282思路如果一个整数不为0,那么这个整数至少有一位为 1;如果这个整数减去 1, 那么原来处在整数最右边的 1 就会变成 0,原来在 1 后面的 0 就会变成 1(如果 1 后面还有 0 的话)原创 2017-07-07 21:00:42 · 360 阅读 · 0 评论 -
【剑指offer】面试题16:数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。时间限制:1秒 空间限制:32768K 热度指数:112816思路首先,考虑一下幂次数的不同情况,幂次数为 0,正整数,负整数。幂次数为 0,结果自然为 0;对于负整数,可以考虑先转化成正整数,再对结果求倒数。优化原创 2017-07-13 22:24:34 · 347 阅读 · 0 评论 -
【剑指offer】面试题32:从上到下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。时间限制:1秒 空间限制:32768K 热度指数:94174思路每次打印一个节点的时候,如果这个节点存在子节点,则把该节点的子节点放在一个队列的末尾。接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直到队列中所有的节点都被打印出来。原创 2017-07-16 20:30:46 · 363 阅读 · 0 评论 -
【剑指offer】面试题 30:包含 min 函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。时间限制:1秒 空间限制:32768K 热度指数:75707本题知识点: 栈思路借助辅助栈来保存最小的元素。每次都把最小元素压入辅助栈,那么就能保证辅助栈的栈顶一直都是最小元素。当最小元素从数据栈内被弹出之后,同时弹出辅助栈的栈顶元素,此原创 2017-07-16 20:57:42 · 319 阅读 · 0 评论 -
【剑指offer】面试题 21:调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。时间限制:1秒 空间限制:32768K 热度指数:141774本题知识点: 数组思路C++版本定义两个指针,第一个指针初始化时指向数组的第一原创 2017-07-17 20:23:16 · 412 阅读 · 0 评论 -
【剑指offer】面试题 22:链表中倒数第 K 个节点
题目描述输入一个链表,输出该链表中倒数第k个结点。时间限制:1秒 空间限制:32768K 热度指数:186080本题知识点: 链表思路初始化两个指针,第一个指针指向第第 k-1 个节点,第二个节点指向第 0 个节点,此时第一个指针比第二个指针相比,往后移动了 k 个节点;之后,两个指针同时往后移动,当第一个指针指向链表的末尾的原创 2017-07-18 12:46:28 · 360 阅读 · 0 评论 -
【剑指offer】面试题 24:反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素。时间限制:1秒 空间限制:32768K 热度指数:137078本题知识点: 链表思路pHead始终指向要反转的节点,last 指向反转后的首节点,每反转一个节点,把 pHead 节点的下一个节点指向 last,last 指向 pHead 成为反转后的首节点,再把 p原创 2017-07-18 13:46:15 · 359 阅读 · 0 评论 -
【剑指offer】面试题 33:二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。时间限制:1秒 空间限制:32768K 热度指数:102891思路后序遍历序列中最后一个数肯定是二叉树的根节点,根节点前面的数分为两部分,第一部分为根节点的左子树,第二部分为根节点的右子树;原创 2017-07-18 22:56:24 · 322 阅读 · 0 评论 -
【剑指offer】面试题 27:二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5原创 2017-07-18 23:14:07 · 342 阅读 · 0 评论