随笔分类 -  数据结构与算法

摘要:一、题目描述 有n个人首先站成一排,请问,当n个人第二次再重新排列,每个人都不在原来的位置上,问有多少种站法。例如,原来有3个人,ABC,那么第二次每个人都不在原来的位置上有2种站法,BCA和CAB,这题其实是一道数学题,考察排列组合的知识。 解题思路:假设有n个人,我们的问题规模设为A(n),A( 阅读全文
posted @ 2018-09-17 20:23 neu_张康 阅读(1792) 评论(0) 推荐(0)
摘要:一、题目描述 给你一个字符串,包含+,-,*,/和(),数字为0-9,让计算该表达式的值,例如"1+2*3-(8/4)+6",结果为11,这是前几天面试去哪儿网,二面面试官让手撕的题目。记忆中本科的时候遇到过,当时也没啥思路。其实这个题需要分两步完成,第一步:把字符串表达式的中缀形式转为后缀形式,怎 阅读全文
posted @ 2018-09-16 10:54 neu_张康 阅读(5478) 评论(1) 推荐(0)
摘要:一、题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。例如下面的二叉树: 思路:如果根节点为null,返回true。然后判断左子树和右子树是否对称。 二、代码演示 阅读全文
posted @ 2018-08-20 10:31 neu_张康 阅读(187) 评论(0) 推荐(0)
摘要:一、题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。还有一种情况是1->1->1->1,那么返回的应该是null。 思路: 因为链表是排序后的,所以重复的结点都是相 阅读全文
posted @ 2018-08-19 23:06 neu_张康 阅读(617) 评论(0) 推荐(0)
摘要:一、题目描述 今天下午面试老虎证券,被问到这题,当时脑子有点蒙,代码没写出来。这题的意思就是给你一个数组,让你计算元素的和,但是这些元素都不能相邻,求最大的和。其实这题很常见,在leetcode上面也有,但是原题是这样的: 假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱 阅读全文
posted @ 2018-08-19 17:22 neu_张康 阅读(4071) 评论(0) 推荐(0)
摘要:这个题目应该是一些大公司面试题中经常被问到的,这里我给出一种做法,至于面试官满不满意我就不知道了。我们知道,这种找出前多少个最大或者最小的最适合用堆排序(对堆排序不熟悉的读者可以参考为的这篇博客:堆排序)。但是如果我们用1亿个数去建堆并调整,当然时间复杂度是不允许的。题目中要求前100个大的,那么我 阅读全文
posted @ 2018-08-16 15:51 neu_张康 阅读(1357) 评论(0) 推荐(0)
摘要:思想:这种题目一般都会要求o(n)的时间复杂度和o(1)的空间,目的就是为了不让你使用HashMap来统计计算。这里我们可以采用两两消除的思想去实现,例如一个数组arr为:1 2 2 3 2 1 2,那么我们把第一个元素arr[0]当作开始的元素k,它的出现次数count赋值为1,然后从第二个元素a 阅读全文
posted @ 2018-08-16 15:15 neu_张康 阅读(1006) 评论(0) 推荐(0)
摘要:一、递归版本 思想:假设根结点为root,其中给定的两个结点分别为A和B,它们分别都不为null。如果当前结点p为null,那么直接返回null,如果当前结点p是给定的结点中的其中一个结点,那么直接返回当前结点p(如果p是根结点,程序一次就返回了,下面的递归也不会出现)。如果当前节点不是A和B中的一 阅读全文
posted @ 2018-08-16 14:56 neu_张康 阅读(13162) 评论(0) 推荐(1)
摘要:一、递归实现 思想:借助栈结构来保存路径上的结点,首先从根结点开始,一直往左找,如果左边找到就返回true;否则,如果左边找不到并且右子树不为空的情况下再继续往右子树找。如果左右子树都找不到,就弹出栈顶结点并返回false。方法运行完毕后,栈中保存的元素就是一条从根到给定结点的路径。 程序运行结束后 阅读全文
posted @ 2018-08-16 13:23 neu_张康 阅读(12981) 评论(2) 推荐(3)
摘要:一、深度 递归版本 非递归版本 思想:二叉树的深度就是指二叉树有几层,那么我们可以使用层序遍历来实现。 二、宽度 思想:二叉树的宽度就是最宽的那一层的节点数,所以还是需要层序遍历的思想,先计算每层的结点数,然后找出最大的。 阅读全文
posted @ 2018-08-16 11:05 neu_张康 阅读(4923) 评论(1) 推荐(0)
摘要:思想:前两天面试拼多多Java岗位,手写算法的时候,面试官问了这道题,由于当时比较紧张,另外是用word写的,没有找到感觉。勉强写出来了一半,现在来好好总结一下。首先这题是根据求二叉树宽度延伸而来的,其实大部分关于二叉树的算法题都是由基本的遍历,求深度,宽度,根到节点的路径等等演变而来的。只要把基本 阅读全文
posted @ 2018-08-16 10:17 neu_张康 阅读(351) 评论(0) 推荐(0)
摘要:一、先序遍历 先序遍历:根 左子树 右子树 递归版本 非递归版本 二、中序遍历 中序遍历:左子树 根 右子树 递归版本 非递归版本 三、后序遍历 后序遍历:左子树 右子树 根 递归版本 非递归版本 后序遍历的非递归应该比前面两种遍历的非递归要复杂些,当然这里我们还是需要借助栈来实现。由于后序遍历是左 阅读全文
posted @ 2018-08-16 08:54 neu_张康 阅读(288) 评论(0) 推荐(0)
摘要:1.介绍: 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种,它的最坏,最好,平均时间复杂度均为O(nlogn)。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PA 阅读全文
posted @ 2018-04-30 12:06 neu_张康 阅读(1247) 评论(0) 推荐(1)