剑指offer
NL_study
这个作者很懒,什么都没留下…
展开
-
剑指offer--Fibonacci
用迭代而不用递归,递归实际操作计算时间过久,当计算到第四个的时候,计算为:Fibonacci(4) = Fibonacci(3) + Fibonacci(2); = Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0); = Fibonacci(1)...原创 2018-11-15 17:20:27 · 166 阅读 · 0 评论 -
剑指offer-跳台阶问题
1. 跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。如果第一次跳一个台阶,那么剩下n-1个台阶,再进行f(n-1)次如果跳两个台阶,那么剩下n-2个台阶,再进行f(n-2)次这就类似于 Fibonacci,可以用递归和循环来解决这个问题。方法一:递归class Solution {...原创 2018-12-10 17:37:39 · 168 阅读 · 0 评论 -
剑指offer-整数中1出现的次数
题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。主要思路都是在该题的讨论区里看到的。我们这里以十位为例,不以百位为...原创 2018-12-07 11:02:23 · 138 阅读 · 0 评论 -
剑指offer-最小的k个数(数组)
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。这道题需要注意的就是input.size()<k这个情况,其他的思路就很简单,排序,输出方法一:sort函数由于用到了sort函数,因此时间复杂度是O(n*logn).class Solution {public: vector...原创 2018-11-27 19:57:17 · 230 阅读 · 0 评论 -
剑指offer-数组中出现次数超过一半的数字(数组)
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。看到这个就想到了c++中的map,C++中map提供的是一种键值对容器,里面的数据都是成对出现的。每对中的第一个值称之为关键字(key),每个关键字只能在map中出现一次;第...原创 2018-11-27 12:14:42 · 126 阅读 · 0 评论 -
剑指offer-从尾到头打印链表(链表)
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。链表中当前节点q的next指针本来指向的是后一个节点,现在要令他指向前一个节点p(在此之前用r存下q的后一个节点)。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x)...原创 2018-11-30 14:04:40 · 106 阅读 · 0 评论 -
剑指offer-把数组排成最小的数(数组)
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。这道题就是一步步拼接,先把两个数拼接,得到较小的那个时间复杂度是O(nlogn)class Solution {public: string PrintMinNumber(vector&l...原创 2018-11-29 20:50:41 · 149 阅读 · 0 评论 -
剑指offer-数字在排序数组中出现的次数(数组)
题目描述统计一个数字在排序数组中出现的次数。方法一:最简单粗暴的方法就是遍历!等于k就令count+1。这个方法是时间复杂度是O(n)。class Solution{public: int GetNumberOfK(vector<int> data,int k){ if(data.size()<0) return 0; int count=...原创 2018-11-29 16:55:52 · 127 阅读 · 0 评论 -
剑指offer-连续子数组的最大和(数组)
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序...原创 2018-11-29 11:34:01 · 138 阅读 · 0 评论 -
剑指offer-数组中只出现一次的数字(数组)
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。这题想到用map,类似于“数组中出现次数超过一半的数组”https://blog.csdn.net/Mr_xuexi/article/details/84555464其中,data[i]是key值,出现次数count为value值。方法一:这个方法比较容易想到,思路也比较简单。...原创 2018-11-28 21:26:11 · 171 阅读 · 0 评论 -
剑指offer-旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。这里采用的方法是在讨论中学习到的方法,基于二分法的思想用low和high指向两边,以及mid=low+...原创 2018-11-20 11:13:23 · 106 阅读 · 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. 这题看似简单,就是分四个方向把矩阵输出了,但是!!!!其实有一些隐藏的点,将矩阵分为三种情况:1.类...转载 2018-11-22 20:49:00 · 252 阅读 · 0 评论 -
剑指offer- 调整数组顺序使奇数位于偶数前面(数组)
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。看着这个题目,想到的是排序算法。(推荐这个)以及利用空间换时间,新建数组的算法。先说这个新建数组的算法,思路简单。就是将奇数和偶数分别计算出来放在新的数组里,再把新的数组给旧数组。class Solut...原创 2018-11-21 12:43:52 · 89 阅读 · 0 评论 -
剑指offer - 二维数组中的查找
二维数组中的查找题目概要:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。其实这个思路是讨论中提到最多的一种思路,并不是自己想出来的。考虑到从左到右的递增和从上到下的递增顺序,我们先考虑左下角,左下角是最左列最后一行的数,他是这一列中最大...原创 2018-11-15 19:36:36 · 135 阅读 · 0 评论 -
剑指offer-二叉搜索树的后序遍历
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。知识点:1、后序遍历是”左右根“。因此最后一个遍历到根节点,故数组中最后一个元素是根节点2、二叉搜索树的特性:左子树上的节点都小于根节点,右子树上的节点都大于根节点。这个后序遍历得到的数组是{1,3,4,2,7,6,5};...原创 2019-08-10 19:58:34 · 150 阅读 · 0 评论