剑指offer
文章平均质量分 51
Y992yu
永远不要停止学习
展开
-
剑指offer - 斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 解题思路:看到这个我第一反应就是递归。。然而递归的话重复计算的部分会有很多,时间花费会很大,所以就想到了迭代,讨论区里还有说动态规划的,我也贴上来,还没有看太懂,,学习中 迭代:public class Solution { public int Fi...原创 2018-07-23 22:24:43 · 206 阅读 · 0 评论 -
用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型 解题思路:栈是先进后出的,队列是先进先出的,这就要求用两个先进后出实现先进先出。push操作都是一样的,pop的话,我们可以将压在栈1的元素依次压入栈2,再从栈2弹出,这样就实现了先进先出。首先要判断栈2是否为空,若不为空,弹出栈2顶部元素。 import java.util.Stack; public cl...原创 2018-07-22 20:31:48 · 137 阅读 · 0 评论 -
数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 题解:这道题,让我学习到了快速幂的用法。。虽然还不熟练,还有&和左移右移 贴一下别人的解,C++的: 链接:https://www.nowcoder.com/questionTerminal/1a834e5e3e1a4b7ba251417554e07c00 来源:牛客网 ...原创 2018-07-26 22:48:09 · 114 阅读 · 0 评论 -
从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 题解:因为栈是先进后出的模式,所以将链表的数字依次压入栈中,再弹出至ArrayList里 /** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * ...原创 2018-07-20 17:21:13 · 113 阅读 · 0 评论 -
链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点。 解析: 看了别人的正解,我觉得特别厉害 就是相当于制造一个K长度的尺子,把尺子从头往后移动,当尺子的右端与链表的末尾对齐的时候,尺子左端所在的结点就是倒数第k个结点 看到这个解释瞬间懂了 1 2 3 4 5 6 7 8 9 10 11 ...原创 2018-07-28 22:43:01 · 166 阅读 · 0 评论 -
二进制中一的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解题思路:用1和n做与运算,然后将1左移继续进行与运算,循环。 另一种做法是,把原来的数最右边的一个1变为0,再与原数进行与操作,就能得到这个位置左边保持不变,右边(包括它自己)变为0。这种解法更好一点。 第一种: 1 2 3 4 5 6 7 8 9 ...原创 2018-07-25 22:56:46 · 216 阅读 · 0 评论 -
替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 解题思路:我拿的是最笨的方法,先算出有多少个空格,在str的长度上增加空格的两倍(因为每替换一次就会多出一个“20”) 再用setCharAt将空格处替换为%,insert插入数字20,这样的复杂度就是O(n) 学到...原创 2018-07-19 16:04:56 · 110 阅读 · 0 评论 -
矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 解题思路:斐波那契数列求解,贴上牛客网看到的讲解 链接:https://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6 来源:牛客网 2*n的大矩形,和n个2*1的小矩形 ...原创 2018-07-24 17:47:54 · 162 阅读 · 0 评论 -
跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 解题思路:一开始还是想到了递归,但是没做出来,后来看了讨论区的解法豁然开朗,还得用迭代。。其实原理和斐波纳契一样,比如跳到第六个台阶,只有两种方案:从第五个台阶跳第六个台阶,从第四个台阶跳第六个台阶,所以f(n) = f(n - 1)+f(n-2)。 java解法...原创 2018-07-23 22:42:12 · 173 阅读 · 0 评论 -
旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 解题思路:一开始的想法特别简单。。就是遍历,因为是非减排序,两个两个比较,所以找到的第一个数大于第二个...原创 2018-07-22 21:41:17 · 110 阅读 · 0 评论