
剑指offer
Borrr_
这个作者很懒,什么都没留下…
展开
-
【剑指offer】12 数值的整数次方 C++实现
题目描述写一个Power函数,不能调用函数库,同时不需要考虑大数问题首先本题可以用循环求解,非常简单,这里不提供了就,不过需要注意负数问题。本方法思想:如果求10次方用循环做,需要做十次,但是如果我们求5次方的2次方只需要五次即可,9次方=4次方*4次方*本身,所以这就使得我们想到用递归求解,同时要注意负数和0的问题。...原创 2020-12-10 20:03:41 · 448 阅读 · 0 评论 -
【剑指offer】二进制中1的个数 C++实现
题目描述请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。题目示例示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 000原创 2020-12-10 19:51:39 · 534 阅读 · 0 评论 -
【剑指offer】 10 矩形覆盖 C++实现
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:思路:根据观察:n = 1:f(n) = 1n = 2:f(n) = 2n = 3:f(n) = 3n = 4:f(n) = 5n = 5:f(n) = 8递归算法class Solution {public: int rectCover(int number) { if(numbe原创 2020-12-10 19:46:29 · 515 阅读 · 1 评论 -
【剑指offer】跳台阶问题 + 变态跳台阶问题 解法(动态规划递归 + 非递归) C++实现
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。通过题目的描述,可以很清晰地看到,这就是一个Fibonacci数列。思路:a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)c.由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2)d.然后通过实际的情况可以得出:只有一阶的时候 f(1) = 1 ,只有原创 2020-12-10 19:40:47 · 710 阅读 · 1 评论 -
【剑指offer】 斐波那契数列 C++实现
题目描述写一个函数,输入 n, 求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:递归求解求解F(n),必须先计算F(n-1)和F(n-2),计算F(n-1)和F(n-2),又必须先计算F(n-3)和F(n-4)。。。。。。以此类推,直至必须先计算F(1)和F(0),然后逆推得到F(n-1)和F(n-2)的结果,从而得到F(n)要计算很多重复的值,在时间上造成了很大的浪费,算法的时间复杂度随着N的增大呈现指数增长,时间的复杂度为O(2^n),即2的n次方#include原创 2020-12-10 19:35:18 · 748 阅读 · 0 评论 -
【剑指offer】 旋转数组的最小数字 C++实现
旋转数组的最小数字(三种解法)题目解题方法一两头比较 我最先想到的方法是设置两个指针low和high,low指向数组首部,high指向数组尾部,两个指针所指位置的数值进行比较,如果rotateArray[low]>=rotateArray[high],low++;反之high–。这种方法和第二种方法用时基本一致,而且不用单独考虑特殊值10111,上代码:class Solution1 {public: int minNumberInRotateArray(vector<in原创 2020-12-10 19:29:58 · 394 阅读 · 0 评论 -
【剑指offer】 利用两个栈实现1个队列 C++实现
题目分析栈:后进先出队列:先进先出要使用两个栈实现队列(先进先出),主要思路是1.插入一个元素:直接将元素插入stack1即可。2.删除一个元素:当stack2不为空时 ,直接弹出栈顶元素,当stack2为空时,将stack1元素逐个弹出并压入stack2,然后再弹出栈顶元素。思路总结:实现队列的pop方法弹出队头元素:stack是一个口进出,也不支持随机存取,所以你无法直接从栈底拿到第一个元素。要想拿到第一个元素,需要将左边栈容器中的所有元素拷贝到右边栈容器中。由于stack先进后出的数据结原创 2020-12-10 19:22:49 · 403 阅读 · 0 评论 -
【剑指offer】07重建二叉树,C++实现
1.题目输入某二叉树的前序遍历和中序遍历的结果,重建二叉树2.思路(递归)前序遍历中,第一个数字是二叉树的根节点中序遍历中,根节点的左侧是左子树的节点,根节点的右侧是右子树的节点3、代码:返回值:指向二叉树节点的指针函数参数:前序遍历结果vector,中序遍历结果vector/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode原创 2020-12-09 21:06:45 · 468 阅读 · 0 评论 -
【剑指Offer】从头到尾打印链表(C++)
剑指Offer-3.从头到尾打印链表(C++)3. 从尾到头打印链表题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。分析(这里我一开始以为是返回一个链表…没想到是返回一个ArrayList…)看给定的代码,这里的返回值是一个int类型的vectorc++的vector可以用insert()函数来向指定位置插入元素,arr.begin()表示在头部,arr.end()表示在尾部。例如://在头部插入10arr.insert(arr.begin(),10);//在尾部原创 2020-12-09 20:59:53 · 490 阅读 · 0 评论 -
【剑指offer】05 替换空格 C++实现
1.题目请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。2.思路从头到尾遍历字符串做替换,时间复杂度为O(n2),效率低从尾到头遍历字符串做替换,时间复杂度为O(n),效率高3.举例(从尾到头遍历字符串)边界检查,判断字符数组是否为空遍历字符串,统计空格总数count_space, 统计替换前字符个数count_old, 统计替换后字符个数count_new,其中count_new = c原创 2020-12-09 20:55:51 · 524 阅读 · 0 评论 -
【剑指offer】二维数组的查找 C++实现
【剑指offer】04A二维数组中的查找,C++实现1.题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数数组和一个整数,判断数组中是否含有该整数。2.思路 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数组,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或原创 2020-12-09 20:44:37 · 500 阅读 · 0 评论