每天一道算法题
主要是剑指Offer的算法题,还有一些遇到的有趣的算法题或者智力题。
Sakura__Lu
多情谁似南山月,特地暮云开。
展开
-
每天一道算法题(二十三)---- 汽水瓶
题目 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝...原创 2019-11-13 10:50:39 · 711 阅读 · 0 评论 -
每天一道算法题(二十二)---- 层次遍历二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。时间限制:1秒空间限制:32768K热度指数:397182解题思路:二叉树的层次遍历,可以借助队列的数据结构。初始化一个队列A,A初始只含有二叉树的根节点(设根节点不为空),当A不为空队列时,将队首弹出,并将队首元素的左右节点(若不为空)依次入队,并且将弹出的元素的值输出。代码如下:import java....原创 2019-08-06 17:35:57 · 220 阅读 · 0 评论 -
每天一道算法题(二十一)---- 栈的入栈、出栈序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)时间限制:1秒空间限制:32768K热度指数:380066解题思路:栈是一...原创 2019-08-06 17:26:00 · 587 阅读 · 0 评论 -
每天一道算法题(十九)---- 顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.时间限制:1秒空间限制:32768K热度指数:536258解题思路:本题看似不难但是有不少细节地方需要考虑...原创 2019-07-30 20:17:26 · 195 阅读 · 0 评论 -
每天一道算法题(十八)---- 二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...原创 2019-08-06 16:39:52 · 139 阅读 · 0 评论 -
每天一道算法题(十六)---- 合并两个有序链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。时间限制:1秒空间限制:32768K热度指数:512433解题思路:思路1:插入法。拆解其中一个链表在保持有序的条件下插入到另一个链表中,最终得到一个有序的合并链表。优点是空间复杂度小;缺点是操作复杂;思路2:挂钩法。顾名思义,把两个链表的每个结点看成一个个天平的砝码一样,按照大...原创 2019-07-23 10:01:59 · 158 阅读 · 0 评论 -
每天一道算法题(十五)---- 反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。时间限制:1秒空间限制:32768K热度指数:531460解题思路:这是一道完完全全的链表的反转题目,关于链表反转有多种方法:(1)使用三个指针逐个反转元素的指向;(2)将链表转换成数组,反转数组后重建链表;(3)头插法重建链表,如下图所示,令newHead = Head;不断的往newHead头部插入元素,并更新newHe...原创 2019-07-22 14:54:20 · 233 阅读 · 0 评论 -
每天一道算法题(十四)---- 输出链表倒数第k个节点
题目描述输入一个链表,输出该链表中倒数第k个结点。时间限制:1秒空间限制:32768K热度指数:728581解题思路:首先找到链表顺数的第k个元素kNode,这时候kNode和头结点head间隔k-1个元素;然后kNode和head同时往后走,当kNode走到头的时候,即kNode == null时,此时head即为链表倒数的第k个节点。此时要注意判断当k< 链表长度的异常情...原创 2019-07-21 14:34:09 · 217 阅读 · 0 评论 -
每天一道算法题(十三)---- 调整数组顺序使奇数在前偶数在后
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。时间限制:1秒空间限制:32768K热度指数:522920解题思路:一个数组将奇数放前面,把偶数放后面,并且要求相对位置保持不变。这就是简化了的稳定排序算法,我们熟知的稳定排序算法有冒泡排序、归并排序、插入排...原创 2019-07-21 14:00:13 · 404 阅读 · 0 评论 -
每天一道算法题(十二)---- 数值的整数次乘方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。时间限制:1秒空间限制:32768K热度指数:447669解题思路:本题主要是实现某一个数的整数次乘方,需要注意的点是exponent可能为正数、负数和0,底数base不能为0。如果使用C++其实可以直接调用库函数里的pow(base, exponent)方法就可以...原创 2019-07-19 10:19:30 · 246 阅读 · 0 评论 -
每天一道算法题(十一)---- 二进制中的1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。时间限制:1秒空间限制:32768K热度指数:431455解题思路:本题主要考察位操作,C++中的一个int占四个字节,与操作是符号&, 左移位操作符号为<<。本题没有什么太绕的东西,就是考验位操作的熟练度。输入一个int型(默认的int为有符号类型)的数n, 我们只要遍历n的每一位就好了,...原创 2019-07-18 20:05:09 · 311 阅读 · 0 评论 -
每天一道算法题(十)---- 矩阵覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?时间限制:1秒空间限制:32768K热度指数:320874解题思路:这道题其实就是斐波那契数列数列,具体的思路和之前的青蛙跳台阶一样,不懂的可以看上两篇文章(青蛙跳台阶)还有斐波那契数列的公式。代码如下:// 斐波那契数列public ...原创 2019-07-18 00:34:40 · 309 阅读 · 0 评论 -
每天一道算法题(九)---- 变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。时间限制:1秒空间限制:32768K热度指数:350775解题思路:这道题是上一道题目的变形,但是这次这只青蛙是蛙中之王,一次能跳x个台阶(x <= n)思路一:上网搜了一下思路,和上一题的思想一样,也可以用逆推的思路去想,跳n级台阶,可以从n-1级跳上来...原创 2019-07-16 11:40:57 · 254 阅读 · 0 评论 -
每天一道算法题(八)---- 青蛙跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。时间限制:1秒空间限制:32768K热度指数:435100本题提示: 递归解题思路:如果这道题没有提示,或许还要想不少时间,然是给了递归的提示,我们的思路就会清晰很多,使用递归去分解问题便是本题的解题关键!但是也没有那么简单......要是没有见过类似的...原创 2019-07-15 16:59:05 · 475 阅读 · 0 评论 -
每天一道算法题(七)---- 斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39。 (吐槽:大家都知道才怪,就不能说明白点吗);条件限制:时间限制:1秒空间限制:32768K热度指数:566893解题思路:一提到斐波那契数列,那几乎是递归函数的典型代表,但是不乏有很多公司让你实现非递归的斐波那契数列版本,所以两个版本都要有。也没有...原创 2019-07-13 20:29:58 · 439 阅读 · 0 评论 -
每天一道算法题(六)---- 旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序(就是增序)的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。限制条件:时间限制:3秒空间限制:32768K热度指数:619742解题思路:看题目旋转...原创 2019-07-13 19:56:18 · 160 阅读 · 0 评论 -
每天一道算法题(五)---- 使用两个栈来实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。条件限制:时间限制:1秒空间限制:32768K热度指数:442461解题前准备:1. 栈栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素...原创 2019-07-13 17:19:47 · 320 阅读 · 0 评论 -
每天一道算法题(四)----根据前序+中序遍历结果反向构造二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。限制条件:时间限制:1秒空间限制:32768K热度指数:672707解题思路:二叉树一直是大学时候的噩梦,但真的猛士敢于面对惨淡的人生,敢于...原创 2019-07-13 16:07:00 · 712 阅读 · 0 评论 -
每天一道算法题(三)----二维数组中的查找
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。条件:时间限制:1秒空间限制:32768K热度指数:1030743我的解题思路: 1. 使用java语言有好用的封装的类库,使用StringBuffer对象的indexOf函数寻找空格,并且将其替换为“%2...原创 2019-07-11 00:08:09 · 232 阅读 · 0 评论 -
每天一道算法题(二)----链表的反转
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。条件:时间限制:1秒空间限制:32768K热度指数:919404我的思路:这道题看起来也没有那么复杂,就是把链表反转一下就好了。 即每一步都是 :q=p->next; t=q->next; q->next = p; p =q;如图:补充: 网上搜了一下大佬的想法是直接使用递归思想直接...原创 2019-07-10 15:14:40 · 162 阅读 · 0 评论 -
每天一道算法题(一)----二维数组中的查找
考研失败后浑浑噩噩的工作了一年,感觉干活的时候也没有用到太多的算法,工作的东西也不是很难,就跟工地搬砖一样,看看别人做么做,自己学着怎么做,改一下现成的代码。后来觉得这样没意思,去牛客网刷刷题目,发现这一年真的是白过了,基础不牢固,算法也不行,原来还有这么多工作中没有用到,但是又很基础很重要的东西。想升职加薪?想去BAT?基础不行,算法也不行,怎么升职加薪。醒悟永远不嫌晚,加油,每天...原创 2019-07-10 14:38:59 · 315 阅读 · 0 评论