![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer 每日一练
程序员爱酸奶
专注springboot、springcloud、docker、redis。乐于分享,欢迎关注
展开
-
《剑指offer》之扑克牌顺子
前言 接着来刷一道简单的算法题 题目 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q...原创 2020-02-13 15:00:56 · 342 阅读 · 0 评论 -
《剑指offer》之和为S的两个数字
前言 昨天刷的和为S的连续正数序列,用到的窗口双指针的方法很好用,今天刚好刷到一道类似的,也是用窗口双指针的,一次就过的感觉还不错。 题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。 分析 输出两个数的乘积最小的。这句话的理解? 假设:若b>a,且...原创 2020-02-13 11:14:31 · 277 阅读 · 0 评论 -
《剑指offer》之和为S的连续正数序列
前言 今天刷的一道题目是是关于穷举的。 题目 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述...原创 2020-02-12 12:39:17 · 306 阅读 · 0 评论 -
《剑指offer》之二叉树的深度
前言 我们今天接着来看一道关于二叉树的算法题,关于二叉树的深度。 题目 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 分析 求该树的深度,主要就是看最长路径。比如下图的深度为5,最长的路径为34,99,35,64,77 那应该怎么做了?这里用递归,如果当前节点没有左右节点,就返回当前节点,如果有左右节点,就返回左右节点的...原创 2020-02-10 19:21:53 · 375 阅读 · 0 评论 -
《剑指offer》之从上往下打印二叉树
前言 从上往下打印二叉树,这里会用到队列,所以先将一下Java队列。 队列 创建队列 Queue<String> queue = new LinkedList<String>(); 添加元素 queue.offer("a"); 出队列 //返回第一个元素,并在队列中删除 queue.poll() //返回队列头部的元素,如果队列为空,则抛出一个NoSuchEleme...原创 2020-02-07 14:53:03 · 307 阅读 · 0 评论 -
《剑指offer》之栈的压入、弹出序列
前言 我们关于栈的题目,这两天做的还是挺多的,无非就是压栈出栈。 题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 分析 输入两个数组,第一...原创 2020-02-06 16:01:25 · 275 阅读 · 0 评论 -
《剑指offer》之顺时针打印矩阵
前言 今天做一道关于矩阵的题目。思路很简单,就是要考虑全面。 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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. 分析 就是顺时针打印,不能重复打印元素。注意四个变量,上下左...原创 2020-02-05 11:59:04 · 280 阅读 · 0 评论 -
《剑指offer》之反转链表
前言 今天又刷了一道关于链表的,本来打算接着前面一篇关于链表的写,但是想想还是再起一篇。 题目 输入一个链表,反转链表后,输出新链表的表头。 分析 最开始我以为输出表头的值,直接找到链表结尾的元素输出就好了,后来发现是输出表头。这就要从新思考了。需要反转链表,比如我们现在的链表为1->3->5->8 我们要反转成8->5->3->1 也就是说之前1的下一个节点是...原创 2020-02-03 18:32:10 · 282 阅读 · 0 评论 -
《剑指offer》之斐波那契数列系列
前言 斐波那契数列 算是比较常见的算法题了。 f(1)=1; f(2)=1; f(3)=2; … f(n)=f(n-1)+f(n-2); 一般采用递归的思想。今天做了几个关于斐波那契数列,都记录下来。 题目一 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 这个是最原始的,就是上面我说的斐波那契数列。代码实现如下: publ...原创 2020-02-02 15:21:54 · 434 阅读 · 1 评论 -
《剑指offer》之用两个栈来实现一个队列
前言 今天刷的一道题是用两个栈来表示一个队列。 我们知道栈和队列的主要区别在于: 栈:后进先出 队列:先进先出。 题目 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 分析 需要通过两个后进先出的栈实现一个先进先出的队列。如下图: 假设往栈stack1 中压入 1,2,3,4,5,6,7 这几个数据,如果直接从stack1中取的话,就是7,6,5,4,3,2...原创 2020-02-01 13:58:50 · 376 阅读 · 0 评论 -
《剑指offer》之重建二叉树
前言 今天的刷的题目是关于树结构的。为了更好的解题,我们先来了解一下前序遍历、中序遍历和后续遍历。 前序遍历:就是从根节点–>左节点–>右节点 就是先从找根节点,然后找左节点。如果左节点上还有子节点,就接着找自己点的根节点,左节点,左节点这样。如下图,数字的顺序就是前序遍历的顺序。 中序遍历: 左节点–> 根节点–> 右节点 中序边临是先找树的左节点,如果左节点还有子节点...原创 2020-01-31 14:45:44 · 411 阅读 · 0 评论 -
《剑指offer》之从尾到头打印链表
前言 今天刷的一道题目,是关于链表的。 题目 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 分析 仅仅看这个题目,有点不知道怎么下手的感觉,意思明白,但是怎么做呢?首先我们的准备一个链表,题目给了提示,我们创建一个ListNode 类,内容如下 public class ListNode { int val; ListNode next = null; ...原创 2020-01-30 14:40:28 · 402 阅读 · 0 评论 -
《剑指offer》之二维数组中的查找
前言 在家呆着没什么是做,做今天开始每天刷一道算法题吧。不多不少,重在自己能坚持下去。所有的算法题都是用Java写的,有兴趣的小伙伴可以一起啊。 题目 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析 这道题目是一个有序的二维数组,给我们一个数判断这...原创 2020-01-29 16:08:48 · 411 阅读 · 0 评论