
剑指offer
seven_-
这个作者很懒,什么都没留下…
展开
-
剑指offer -- 跳台阶
描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。分析:递归经典入门题目。思路一:用递归解决,青蛙一次可以上1级或2级台阶,那么意味着每次剩余的台阶个数为n-1或n-2,即当有n级台阶时,可能的走法为上n-1级和n-2级台阶之和。由此可得递推公式:由递推公式可以写出如下解答:class Solution {p...原创 2019-01-25 21:26:15 · 444 阅读 · 0 评论 -
剑指offer -- 包含min函数的栈
描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。分析:实现一个栈,其中有一个函数可以返回这个栈中最小元素的值,要求min函数时间复杂度为O(1)。思路一:这题关键在于pop之后最小值有可能会发生变化,关键在于如何处理这种变化过程。这里我使用map用来处理这种变化状态,理由有以下几点:1.栈中存在重复元素,用map的value记录比...原创 2019-02-23 17:24:32 · 301 阅读 · 0 评论 -
剑指offer -- 用两个栈实现队列
描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析:用两个栈来实现队列,一个栈用来存储Push的值,用另一个栈来进行Pop操作。思路一:class Solution{public: void push(int node) { stack1.push(node); } int pop() { ...原创 2019-02-10 13:51:42 · 235 阅读 · 0 评论 -
剑指offer -- 反转链表
描述:输入一个链表,反转链表后,输出新链表的表头。分析:参考LeetCode Problem – 206. Reverse Linked List思路一:迭代。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Sol...原创 2019-02-10 13:18:11 · 341 阅读 · 0 评论 -
剑指offer -- 连续子数组的最大和
描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的...原创 2019-02-10 12:44:26 · 229 阅读 · 0 评论 -
剑指offer -- 求1+2+3+4+...+n
描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。分析:既然不能使用乘除法及判断操作,很容易想到递归,代码如下:class Solution {public: int Sum_Solution(int n) { if (n <= 0) return 0; ...原创 2019-02-08 10:18:11 · 519 阅读 · 0 评论 -
剑指offer -- 二叉树的高度
描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。分析:二叉树经典题目,关键在于使用何种方式来遍历树。思路一:递归遍历。每次调用一次递归给高度+1,最终选择左子树遍历和右子树遍历中高度大的一方。/*struct TreeNode { int val; struct TreeNode *left; stru...原创 2019-02-01 16:35:21 · 156 阅读 · 0 评论 -
剑指offer -- 二叉树的镜像
描述:操作给定的二叉树,将其变换为源二叉树的镜像。源二叉树: 8 / \ 6 10 / \ / \ 5 7 9 11镜像二叉树: 8 / \ 10 6 / \ / \ 11 9 7 5分析:所谓二叉树镜像是交换每个节点的左右子树得到的新树,实质上考察的是二叉树的遍历,遍历到一个节点就交换这个节点的子...原创 2019-01-26 20:15:43 · 140 阅读 · 0 评论 -
剑指offer -- 变态跳台阶
描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:这道题是跳台阶的升级版,其中的难点在于如何找出递推公式并将其化简,推导步骤如下:当只有一级台阶时,只有一种上楼方式,即f(1) = 1当有两级台阶时,和跳台阶相同,有两种上楼方式,即f(2) = 2当有三级台阶时,f(3) = f(1) + f(2)…当有n-1级...原创 2019-01-26 09:59:24 · 570 阅读 · 0 评论 -
剑指offer -- 替换空格
描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。分析:将给定字符串中的空格替换为’%20’思路一:先统计给定字符串中的空格个数,然后从后向前遍历字符串,把每一个字符移动到他的最终位置上去,并对空格进行填充。class Solution {public: void rep...原创 2019-01-26 09:02:25 · 179 阅读 · 0 评论 -
剑指offer -- 二维数组中的查找
描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:LeetCode有一道相同题目,具体详解可以参考我的这篇博客 ---- Leetcode problem240. Search a 2D Matrix II代码:class Soluti...原创 2019-01-25 21:41:50 · 762 阅读 · 0 评论 -
剑指offer --斐波那契数列
描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39分析:递归基础题目。从第0项开始求出n所对应的斐波那契数列,斐波那契数列递推公式如下:思路一:递归实现,简单但容易超时。class Solution {public: int Fibonacci(int n) { if (n <=...原创 2019-01-25 21:35:55 · 253 阅读 · 0 评论 -
剑指offer -- 数值的整数次方
描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。分析:求double类型的exponent次方思路一:递归。由于次方可以看做一个不断相乘的过程,因此每次递归调用函数进行相乘就可以达到目的。class Solution {public: double Power(double base, int exponent...原创 2019-02-27 09:50:21 · 289 阅读 · 0 评论