
习题
leetcode和牛客的习题
Rocketcp3
这个作者很懒,什么都没留下…
展开
-
一道关于大数据面试题(1)
大数据时代来临,现在好多面试都有大数据题目,下面大家一起来看一道大数据题目吧题: 文件中产生100000(十万)个随机数字,数字的取值范围0~32767,按如下要求实现,在实现过程中能够使用的数组最长为10000,个别变量的内存忽略。找到重复次数最多的那个数字(如果有多个,选择任意一个) 乍一看这个题我们可能这个数字庞大难以下手,这个题我的...原创 2019-03-15 21:01:11 · 300 阅读 · 0 评论 -
对逆波兰式(后缀表达式)求值详解
题目:编程对一个逆波兰式(后缀表达式)进行求值,如“435*+23*-”的结果是 13,函数的参数为字符串(后缀表达式),假定字符串为正确的逆波兰式。解题思路:定义一个栈对象,然后开始遍历字符串,当遇到数字时直接入栈,当遇到运算符时出栈两个元素并且出来的两个元素和那个运算符进行计算。讲计算结果再次入栈。遍历结束后栈中的值就是逆波兰式的值。(1)定义栈:(2)遍历字符串,第一个字符4是数字,所以直接入栈:(3)同理后面的3和5也都是数字所以直接入栈。(4)继续遍历字符串,遇到原创 2020-07-21 21:02:26 · 1572 阅读 · 6 评论 -
栈解决括号匹配问题
题目:、假设一个表达式中可以包含三种括号:小括号,中括号,大括号,且这三种括号可以任意次序嵌套使用,如:“3*[5+4]*{[3+5]*[40-2*(5-3)]}” ,编写判断表达式括号是否匹配的程序。表达式为字符串。解题思路:解决括号匹配问题我们要考虑的是优先级,大家学过数学的都知道要想解决这类算式我们要做的就是去括号,去括号不能随便去,要先去除最后写的一组括号。意思就是如果大括号“{}”里面还有小括号“()”我们要先去小括号再去大括号。意思就是后写入的一组括号要先被处理。而先写入的括号最后处理。这原创 2020-07-20 23:55:02 · 18259 阅读 · 1 评论 -
剑指offer笔试题:另类1+2+3+.......+n
题目要求:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)解题思路:针对1+2+3+...+n我们有如下若干方法方法一:公式求和;高中数学中我们知道这是公差为1的等差数列求和,我们只需要带入等差数列前n项和公式n(n-1)/2,但是主要解题用了乘除法所以不可以方法二:循环求和;通过循环来实现求和,但题目要求不能使用循环。所以这种办法也不行。方法三:递归调用;递归调用有一个很主要的因素就是规定临界值原创 2020-06-19 10:03:50 · 231 阅读 · 0 评论 -
剑指offer面试题:打印1到最大的n位数
题目描述:输入数字n,按顺序打印从1到最大的n位十进制数例如:输入3,//最大的三位数为999, 输出:打印出1,2,3,4.。。。。999。基础入门解法:虽然可以解出本题,但是当输入的n很大时,超出long long型会造成溢出,这才是本题的难点。void print1(int n){ int max=1; for(int i=0;i<n;...原创 2020-03-14 13:34:51 · 149 阅读 · 0 评论 -
剑指offer面试题:数值的整数次方
问题描述:实现一个函数double power(double base,int exponent),不得使用库函数。不需要考虑大数问题. 思路:利用循环之间解,本题的难点在于需要考虑的全面,比如输入的指数是否为正数。负数的负指数幂求解。//实现一个函数double power(double base,int exponent),不得使用库函数。不需要考虑大数问题#include&...原创 2020-03-07 18:45:36 · 150 阅读 · 0 评论 -
剑指offer面试题:二进制中1的个数(位运算)
题目:请实现一个函数,输入一个整数,输出该二进制中表示的1的个数。例如9的二进制是1001,二进制中有2个1,所以输出2。思路:统计二进制中1的个数实际上就是进行位运算。解法一:分别判断最低位,次低位,次次低位。。。是不是1。然后统计数量。拿数字9为例,二进制为1001。我们让9和1进行与运算,1001 & 0001为1,计数元素就+1,也就说明最低位为1,然后将1左移一位变成00...原创 2020-03-06 23:34:58 · 301 阅读 · 0 评论 -
剑指offer面试题:两种方法解决斐波那契数列
题目:写一个函数,输入n,求斐波那契数列的第n项。(1,1,2,3,5,8)思路:斐波那契数列作为数学历史上很经典的存在,让我们用代码快速解出他的第n项。我们的第一种方法是递归,这种方法解斐波那契数列优点就是很容易理解,但是缺点就是数字稍微大一点它花费的时间就特别的长,因为递归中重复计算的部分太多了,数字小可能差别不大,但数字大就体现出来了#include<stdio.h...原创 2020-03-06 21:58:58 · 321 阅读 · 0 评论 -
剑指offer面试题:旋转数组的最小数字。
题目要求:找出一个旋转数组中的最小值(所谓旋转数组就是把一个递增的数组找出若干个连续元素搬到末尾,比如数组{1,2,3,4,5}的旋转数组可以是{4,5,1,2,3} 普遍思路:大家刚看到这道题的第一反应应该是遍历逐个数组找出最小值,这样做当然可以解决这道题,但有个缺点就是时间复杂度为O(n),并且没有用到题目给出的旋转数组的递增特性。所以我们可以另辟...原创 2020-03-06 16:32:00 · 227 阅读 · 0 评论 -
剑指offer面试题:两个栈实现队列
题目描述:两个栈实现队列,给定了队列声明,实现函数appendtail和deletehead。分别为在队尾插入节点和在队头删除节点。 解题思路:栈的特点是先进后出,而队列为先进先出,我们可以用两次先进后出得到先进先出,就像数学中的负负得正一样。实现。比如说我们把所有节点都插入1号栈中,比如插入的是abc,当我们要在队头删除节点理论上要先删a,但是因为栈的特点只能先删c...原创 2020-03-05 23:48:06 · 174 阅读 · 0 评论 -
剑指offer面试题:重建二叉树(注释很多)
题目要求:输入二叉树前序遍历和中序遍历的结果,假设输入的数字都不包含重复数字,构建出满足序列的二叉树。 树结构是我一直很头疼的一部分,感觉他是数据结构中最繁琐的了,如果我们要想学会这部分首先大家一定要明白树的结构,以及前序遍历,中序遍历,后续遍历的特点,还有就是脑子中有递归的概念。明白看这些特点我们再学树就如鱼得水了,废话不多说,大家可以看看代码,我把需要注意的地方都...原创 2020-03-05 21:58:44 · 185 阅读 · 0 评论 -
剑指offer面试题:二维数组的查找
题目:在一个二维数组中,每一行按照从左到右递增的顺序排序,每一列按照从上到下的顺序排序,输入二维数组和整数,判断是否存在。例如下方的二维数组:1 2 8 92 4 9 124 7 10 136 8 11 15 思路:当我们看到这道题的第一反应应该是遍历这个二维数组,逐个进行查找,这样虽然可以得到结果但是时间复杂度较大,并且没有用到题目中给我...原创 2020-03-04 10:16:03 · 206 阅读 · 0 评论 -
剑指offer面试题:从未到头打印链表(用栈实现)
题目:输入一个链表的头节点,从尾到头反过来打印每个节点的值。 相信大家看到这道题的第一反应就是把这个链表整个给逆置过来。然后从头到尾遍历打印吧。当然这样的方法可以帮助我们解决这道题,但是有个缺点就是这样做改变了原本链表的结构,题目要求只是打印,我们可不可以不改变原始结构结构实现操作呢? 思路:我们发现从尾到头打印就意味着最前面的元素最后打印,而最后的元素却最先打印,这不...原创 2020-03-04 09:56:17 · 217 阅读 · 0 评论 -
剑指offer面试题:空格替换
题目:实现一个函数,把每个空格替换成%20,例如输入we are happy,输出we%20are%20happy。 解题思路一:我相信大家和我一样看到这道题的第一印象应该就是从头遍历数组,遇到空格就是将后面的字符向后移动,然后再插入字符,这样做虽然可以解决这个问题,但是遍历数组和向后移动字符一起进行会使时间复杂度变为O(n^2),并且移动过的代码会再次移动(比如happy,遇到第一...原创 2020-03-02 00:07:16 · 201 阅读 · 0 评论 -
剑指offer面试题:赋值运算符重载以及细节上的问题(operator=)
我们在学习类的时候知道一个完整的类中应该存在大默认函数函数: 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值运算符的重载函数 5.取地址操作符的重载函数 6.const修饰的取地址操作符的重载函数 构造函数,析构函数,拷贝构造函数大家应该不怎么陌生,今天给大家讲解一下我理解的赋值运算符重载函数并且讲...原创 2020-02-11 20:25:56 · 394 阅读 · 0 评论 -
二分查找的一系列问题
关于二分查找大家都挺熟悉的,今天主要是给大家讲一下二分查找衍生出来的一系列问题首先给呈上二分查找的代码实现//返回目标数字的下标//val:查找的数字int SearchValue(const vector<int> &vec,const int val){ int right=vec.size()-1; int left=0; int mid; while(right>=left) { mid=(right-left)/2+left; if(va原创 2020-07-19 00:56:46 · 167 阅读 · 0 评论 -
算法题:神奇的数字
题目描述在这个特殊的假期里,由于牛牛在家特别无聊,于是他发明了一个小游戏,游戏规则为:将字符串数字中为偶数位的数字进行翻转,将翻转后的结果进行输出。示例1输入复制"1234"输出复制"1432"说明第2、4位为偶数,所以将其翻转后,得到 1432示例2输入复制"12346"输出复制"16342"说明第2、4、5位为偶数,所以将其翻转后,得到 16342解题思路:我们发现要把偶数反转,说到反转我们就想起来经常使用的原创 2020-07-13 00:41:35 · 688 阅读 · 0 评论 -
数据结构之哈希链表Hashtable
散列(Hashing)在现实中经常遇到按照给定的值进行查询的实例。在软件开发过程记录存放的位置和用于表示他的数据项直接的对应关系。这种数据结构记录了数据和数据位置的信息,这就是Hashing。我们哈希链表的数据结构图示是这样的 如图所示这就是整个hashtable的图书,其中红色部分其实是一个数组,里面存放的是链表,大家可以通过蓝色知道里面存放的是链表,绿色部分就是链表的一个结点,有数据域和...原创 2020-07-11 12:32:51 · 6049 阅读 · 1 评论 -
循环和递归解决全排列问题
首先先帮大家了解一下数字的全排列,数字的全排列在我看来就是把给出的若干数字按照不同的顺序就行排序,比如说:{1,2,3}这三个数字就行全排列我们可以排出{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,2,1},{3,1,2} 方法一:因为给的数值比较小所以我们可以用一个笨办法(同时也是一个容易理解的方法)解决。也就是枚举法。int main(){ f...原创 2020-05-05 12:13:22 · 1620 阅读 · 1 评论 -
邻居交换——冒泡排序
相信大家看了上篇博客了解了我们简化版的桶排序有一定的局限性,对于数字大的占用空间严重并且无法处理小数,所以这节课给大家讲比桶排序的实用性高一点的冒泡排序。 首先冒泡排序的核心思想就是比较相邻的两个元素,顺序错误那就换位置。(顺序指的是从大到小或者从小到大) 就比如说我们要将12,35,99,18,76这五个数要按照从大到小的顺序进行排序。就意味着小...原创 2020-04-30 12:14:50 · 10892 阅读 · 0 评论 -
最快最简单的排序——桶排序
在我们日常生活中经常会用到排序,像站队时要按照身高进行排序,考试成绩单要按照分数排序,购物按照价格排序等等。可以说排序是无处不在的。下面给大家通过一个实例来给大家讲一下最简单最容易的桶排序。最简单最快的桶排序,我们可以把数组想象成一个又一个桶,每一个桶只能装一个特定的数字,桶里有几个数字我们就打印几次,遇到空桶就跳过。排序的过程就是遍历数组的过程,相当于我们不用考虑排序,只需要考虑打印就好...原创 2020-04-27 13:21:04 · 533 阅读 · 0 评论 -
二叉树的层序遍历(队列)
层序遍历就是逐层遍历树结构。广度优先搜索是一种广泛运用在树或图这类数据结构中,遍历或搜索的算法。 该算法从一个根节点开始,首先访问节点本身。 然后遍历它的相邻节点,其次遍历它的二级邻节点、三级邻节点,以此类推。当我们在树中进行广度优先搜索时,我们访问的节点的顺序是按照层序遍历顺序的。,说简单点就是一层遍历完遍历下一层。层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。需要借用一个辅助数据结构队列来实现,队列先进先出,符合一层一层遍历的逻辑,而是原创 2020-08-13 12:24:50 · 2362 阅读 · 0 评论 -
二叉树的前序,中序,后序遍历(递归)
前序遍历前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public原创 2020-08-13 11:37:38 · 247 阅读 · 0 评论 -
不同路径(动态规划)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径?解题思路:因为每次只能往右边和下边移动,所以某个格子的状态就等于左边的和上边的格子之和,所以状态转移方程就是arr[i][j]=arr[i][j...原创 2020-08-06 19:47:57 · 326 阅读 · 0 评论 -
盛水最多的容器两种解法(c++)
题目描述:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。 示例:输入:...原创 2020-08-01 18:42:39 · 1039 阅读 · 0 评论 -
魔术索引
魔术索引。 在数组A[0...n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。示例1:输入:nums = [0, 2, 3, 4, 5]输出:0说明: 0下标的元素为0示例2:输入:nums = [1, 1, 1]输出:1说明:nums长度在[1, 1000000]之间此题为原书中的 Follow-up,即数组中可能...原创 2020-08-01 10:09:00 · 261 阅读 · 0 评论 -
经典atoi(字符串转整数)
相信大家在学习字符串的过程中都做过把字符串转整数这个题目,大家都知道在数字字符后面-‘0’就变成了数字。记得当时的编程多么单纯,不用考虑一些变态的测试用例,只需想最理想的情况基本上写七八行代码就实现了这个功能。但现在不一样了,变态离谱的测试用例等着我们实现。所以今天这个atoi是在当时的基础上完善升级的。题目要求:请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:1.如果第一个非空字..原创 2020-07-31 22:40:00 · 259 阅读 · 0 评论 -
Z字形变换(c++版)
题目描述:将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例1:输...原创 2020-07-29 00:21:14 · 1916 阅读 · 0 评论 -
寻找两个正序数组的中位数(归并排序)
题目描述:给定两个大小为 m 和 n 的正序(从小到大)数组nums1和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5思想:把这两个有序的数组合并成一个有序的数组...原创 2020-07-28 15:14:55 · 546 阅读 · 0 评论 -
最长回文子串(动态规划解答)
题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解题思路:根据回文串的特性:我们知道一个字符串是回文那么同时去掉首尾一个字符仍然是回文(abcba同时去掉首尾的a,剩下的bcb仍然是回文),根据这个特性我们就可以列出他的状态转换方程。我们设一个二维数组dp[i][j]来判断从下标 i 到下标 j.原创 2020-07-28 14:45:48 · 238 阅读 · 0 评论 -
矩阵中最长的递增路径(深度优先)
题目描述给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums =[ [9,9,4], [6,6,8], [2,1,1]]输出: 4解释: 最长递增路径为[1, 2, 6, 9]。示例 2:输入: nums =[ [3,4,5], [3,2,6], [2,2,1]]输出: 4解释: 最长递增路径是[3, 4,...原创 2020-07-26 17:15:35 · 1806 阅读 · 0 评论 -
买卖股票的最佳时间
题目:给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票...原创 2020-07-26 11:32:04 · 405 阅读 · 0 评论 -
leetcode求给定二叉树的最大深度
题目简述:求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。示例1输入{1,2}输出2示例2输入{1,2,3,4,#,#,5}输出3解题思路:求二叉树的最大深度,我们可以采用递归的思想,比较左子树和右子树的深度,谁的深度大就取谁。边界就是最后的叶子结点,所以代码如下/** * struct TreeNode { * int val; * struct TreeNode *left; * struct Tree原创 2020-05-29 11:00:49 · 551 阅读 · 0 评论