数据结构与算法
花花诗人
深度学习 高性能计算 服务端架构
展开
-
剑指offer面试题 合并两个排序的链表
题目描述:输入两个递增排序的链表,合并这两个链表并使新链表的结点仍然是按照递增排序的。例如输入下图中的链表1和链表2,则合并之后的升序链表如链表3所示。链表结点的定义如下:原创 2016-04-21 16:09:40 · 362 阅读 · 0 评论 -
window 平台下go的包导入问题解决
之前window平台下的go的包导入问题一直没搞清楚,今天重点学习了一下,下面是学习记录参考文档:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.2.mdgo的安装 不详细说了,我用的是标准安装包方式Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac...原创 2018-10-25 17:55:16 · 1490 阅读 · 0 评论 -
剑指offer面试题 链表中倒数第K个结点
题目描述:输入一个链表,输出该链表中倒数第K个结点。本题从1开始计数,即链表的尾结点是倒数第一个结点。例如一个链表有6个结点,从头开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。原创 2016-04-21 14:18:02 · 395 阅读 · 0 评论 -
剑指offerr面试题 调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解法一:只完成基本功能的解法解法二:考虑可扩展性的解法原创 2016-04-21 11:21:35 · 376 阅读 · 0 评论 -
剑指offer面试题 字符串的排列
题目描述:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bca、cab和aba。原创 2016-04-20 14:55:21 · 350 阅读 · 0 评论 -
剑指offer面试题 二叉树中和为某一值的路径
题目描述:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树的结点定义如下:原创 2016-04-20 11:21:25 · 255 阅读 · 0 评论 -
剑指offer面试题 二叉搜索树的后续遍历序列
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都不相同。原创 2016-04-20 10:07:30 · 284 阅读 · 0 评论 -
剑指offer面试题 树的子结构
题目描述:输入两棵树A和B,判断B是不是A的子结构。二叉树结点定义如下:原创 2016-04-21 17:02:46 · 1179 阅读 · 0 评论 -
剑指offer面试题 赋值运算符函数
题目描述:如下为CMyString的声明,请为该类型添加赋值运算符函数。解法一:经典的解法解法二:考虑异常安全性的解法原创 2016-04-22 08:16:52 · 305 阅读 · 0 评论 -
剑指offer面试题 二进制中1的个数
题目描述:请实现一个函数,输入一个整数,输出该数二进制中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。解法一:常规解法解法二:创新解法原创 2016-04-22 12:56:59 · 401 阅读 · 0 评论 -
剑指offer面试题 斐波那契数列
题目描述:写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下:如果用递归方式求解这个问题,会产生大量的重复运算,而且随着n的增大其重复运算是指数增长的,效率低很不实用。原创 2016-04-22 11:18:18 · 425 阅读 · 0 评论 -
剑指offer面试题 旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。原创 2016-04-22 10:40:28 · 272 阅读 · 0 评论 -
剑指offer面试题 用两个栈实现队列
题目描述:用两个栈实现一个队列。队列的声明如下,请实现两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。原创 2016-04-22 10:17:10 · 254 阅读 · 0 评论 -
剑指offer面试题 从尾到头打印链表
题目描述:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。解法一:用栈实现解法二:用递归方式实现代码如下:补充:原创 2016-04-22 09:47:02 · 262 阅读 · 0 评论 -
剑指offer面试题 替换空格
题目描述:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入'We are happy.',则输出“We%20are%20happy.”。时间复杂度为O(n)的解法:原创 2016-04-22 09:27:15 · 290 阅读 · 0 评论 -
剑指offer面试题 实现单例模式
题目描述:设计一个类,我们只能生成该类的一个实例。原创 2016-04-22 08:36:38 · 333 阅读 · 0 评论 -
剑指offer面试题 从上往下打印二叉树
题目描述:从上往下打印出二叉树的每个结点,同一层的结点按从左往右的顺序打印。例如下图中的二叉树依次打印出8 6 10 5 7 9 11.原创 2016-04-19 17:05:39 · 270 阅读 · 0 评论 -
剑指offer面试题 包含min函数的栈
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。原创 2016-04-19 10:10:39 · 225 阅读 · 0 评论 -
剑指offer面试题 求数组中出现次数超过一半的数字
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{12,3,2,2,2,5,4,2}。由于数字2在数组中出现超过了5次,超过数组长度的一半,因此输出2。解法一:基于Partition函数的O(n)解法代码中的CheckInvalidArray函数用来判断输入的数组是不是无效的。原创 2016-04-12 10:57:15 · 383 阅读 · 0 评论 -
剑指offer面试题 不用加减乘除做加法&&不能被继承的类
题目一:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、x、/等四则运算符号这个题的具体讲解 见 求职宝典 P69题目二:用C++ 设计一个不能被继承的类常规的解法:把构造函数设为私有函数创新解法:利用虚拟继承上一个解法使用上有些不方便,比如只能得到位于堆上的实例,而不能得到位于栈上的实例。原创 2016-04-11 22:45:07 · 328 阅读 · 0 评论 -
剑指offer面试题 扑克牌的顺子
题目描述:从扑克牌里随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q 为12,K为13,而大小王可以看成任何数字。原创 2016-04-07 19:11:50 · 558 阅读 · 0 评论 -
剑指offer面试题 求数组中只出现一次的数字
题目描述:一个整形数组里除了两个数字之外,其他的数字都出现了两次。例如输入{2,4,3,6,3,2,5,5 },只有4、6这两个数字只出现了一次,其他数字都出现了两次,所以输出4和6。请编写程序找出这两个只出现一次的数字,要求时间复杂度为O(n),空间复杂度为O(1);参考代码如下:原创 2016-04-05 21:37:44 · 333 阅读 · 0 评论 -
剑指offer面试题 求二叉数的深度
题目一:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成一条路径,求最长路径的长度为二叉树的深度。二叉树的结点定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft;原创 2016-04-04 17:04:13 · 405 阅读 · 0 评论 -
剑指offer面试题 求数字在数组中出现的次数
题目描述: 统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3 在这个数组中出现了4次,因此输出4 。题目分析:原创 2016-04-01 23:25:50 · 358 阅读 · 0 评论 -
剑指offer面试题:求树中两个结点的最低公共祖先
面试题:求树中两个结点的最低公共祖先分析:1)先讨论树是二叉树的情况,如果树是二叉树,并且是二叉搜索树,是可以找到公共祖先的,解法如下:2)如果这棵树不是二叉搜索树,甚至连二叉树都不是,只是一颗普通的树,树中结点有指向父结点的指针,解法如下:3)如果这棵树是普通的树,而且树中结点没有指向父结点的指针,解法如下:4)解法3)中,原创 2016-03-31 20:41:00 · 706 阅读 · 0 评论 -
剑指offer面试题 求数组中连续子数组的最大和
题目描述:输入一个整型数组,数组中有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。解法一:举例分析数组的规律2}。解法二:应用动态规划法原创 2016-04-12 12:49:38 · 485 阅读 · 0 评论 -
剑指offer面试题 求从1到n整数中1出现的次数
题目描述:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。解法一:不考虑时间效率的解法解法二:从数字规律着手明显提高时间效率的解法代码待补充。。。原创 2016-04-12 14:07:53 · 519 阅读 · 0 评论 -
剑指offer面试题 顺时针打印矩阵
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:原创 2016-04-19 10:05:54 · 343 阅读 · 0 评论 -
剑指offer面试题 二叉树的镜像
题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。解析:代码如下:原创 2016-04-19 08:58:01 · 326 阅读 · 0 评论 -
剑指offer面试题 求1+2...n
题目描述:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。分析:由题目的限制条件可知,不能使用常规解法如循环和递归。解法一:利用构造函数求解解法二:利用虚函数求解原创 2016-04-09 22:11:10 · 344 阅读 · 0 评论 -
常用查找算法 总结
本文主要介绍四种常用的查找算法,即 顺序查找,二分查找,哈希表查找和二叉排序树查找1.顺序查找 顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数为止,它的缺点是效率低下。2.二分查找(折半查找)二分查找又称折半查找,仅适用于事先已经排好序的顺序表。这里直接给出其算法原创 2016-04-09 15:32:10 · 553 阅读 · 1 评论 -
八大排序算法总结
概述在排序过程中,根据数据元素是否完全在内存中,可将排序算法分为两类:内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里只讨论内部排序。各种排序算法的关系可由下图描述(出处http://blog.csdn.net/hguisu/article/details/7776068),由此我们可以把内部排序算法分为8种。原创 2016-04-08 15:35:09 · 411 阅读 · 0 评论 -
剑指offer面试题 求两个链表的第一个公共结点
题目描述:输入两个链表,找出它们的第一个公共结点。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext; };思路一:蛮力法思路二:使用栈思路三:快慢指针思路三代码实现如下:原创 2016-04-13 13:18:58 · 316 阅读 · 0 评论 -
剑指offer面试题 第一个只出现一次的字符
题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出‘b’。该方法的时间效率和空间效率分别是O(n)和O(1)。原创 2016-04-13 10:11:15 · 316 阅读 · 0 评论 -
双向链表的相关操作C++实现
对于循环双向链表判断一个链表是否为空的条件为:head->next==head (头指针)判断*p为最后一个节点的条件为:p->next=head[cpp] view plain copy#include using namespace std; /*双链表结构*/ typedef struct no转载 2016-04-25 17:17:31 · 525 阅读 · 0 评论 -
回朔法浅析
1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。转载 2016-03-31 18:57:20 · 1230 阅读 · 0 评论