牛客网/力扣网刷题
文章平均质量分 64
平常在做牛客网和力扣网的题目时,将一些题目的解法和心得分享给大家。
做1个快乐的程序员
自学编程的小白,希望大家多多指教
展开
-
从尾到头打印链表
从尾到头打印链表(点击链接进入题目)描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图: 返回一个数组为[3,2,1]示例1 输入:{1,2,3} 返回值:[3,2,1]示例2 输入:{67,0,24,58} 返回值:[58,24,0,67]法一:我们发现数组元素的遍历和链表元素的遍历是相反的,这让我们想到了栈的特性,所以我们可以利用栈来实现。class Solution {public: vect原创 2021-10-18 10:56:15 · 260 阅读 · 1 评论 -
替换空格为%20
替换空格(点击链接进入题目)描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题目分析:原字符串是包含空格的,而变化之后的字符串长度增加,且将空格替换为%20。法一:我们直接利用C++的string,创建一个string类的对象,然后遍历原字符串,当遇到非空格时,即在string类对象的末尾插入字符,若遇到空格,则在string类对象的末尾插入“%20”字符串。class Sol原创 2021-09-14 22:02:32 · 551 阅读 · 2 评论 -
旋转数组的最小数字
旋转数组的最小数字(点击链接进入题目)描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例1 输入:[3,4,5,1,2] 返回值:1法一:线性遍历,定义一个min变量用来存储最小值,然后遍历数组,遇到小的就更新min,最后输出min。代码较简单,但是时间复杂度为O(N)。不推荐。class Solution {public: int原创 2021-09-11 10:46:24 · 156 阅读 · 2 评论 -
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面(点击链接进入题目)描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题目分析:针对本题,我们有不同的方法来解决,本题中保证奇数和偶数之间的相对位置不变是一个难点,读者们可以分别考虑两种情况:a-相对位置变化;b-相对位置不变。法一:我们很容易想到的一个方法就是对数组进行遍历,此时借助一个辅助数组newarray,遍历第一遍数组找出奇数,挨个尾插原创 2021-09-09 14:53:29 · 1050 阅读 · 0 评论 -
重建二叉树
重建二叉树(点击链接进入题目)描述给定某二叉树的前序遍历和中序遍历,请重建出该二叉树并返回它的头结点。说明: 返回根节点,系统会输出整颗二叉树对比结果示例1 输入:[1,2,4,7,3,5,6,8],[4,7,2,1,5,3,8,6] 返回值:{1,2,3,4,#,5,6,#,7,#,#,8}示例2 输入:[1],[1] 返回值:{1}示例3 输入:[1,2,3,4,5,6,7],[3,2,4,1,6,5,7] 返回值:{1,2,5,3,4,6,7}题目分析:题原创 2021-09-08 19:45:15 · 226 阅读 · 3 评论 -
二维数组中的查找
二维数组中的查找(点击链接进入题目)在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21原创 2021-09-07 11:41:02 · 225 阅读 · 4 评论 -
逆波兰表达式求值
逆波兰表达式求值(点击链接进入题目)题目:根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。题目分析:我们观察发现,在逆波兰表达式中,其给定的表达式中,运算符的优先级已经是最优的了,即我们在遍历后缀表达式时,遇到操作符就要用操作符计算前面的两个值,并将结果保存,继续向后遍历。 因此,我们可以原创 2021-09-07 11:13:43 · 329 阅读 · 1 评论 -
字符串相加
字符串相加(点击链接进入题目)给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示: num1 和num2 的长度都小于 5100 num1 和num2 都只包含数字 0-9 num1 和num2 都不包含任何前导零 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式题目分析:法一: 我们先假设给定的不是字符串形式的数字,而是正常的非负整数,则两数相加遵循正常的加法运算,个位数与个位数相加,十位数与十位数相加,如果该位计原创 2021-09-04 10:37:11 · 3958 阅读 · 3 评论 -
只出现一次的数字(Ⅰ、Ⅱ、Ⅲ)
只出现一次的数字(Ⅰ)(点击链接进入题目)只出现一次的数字(Ⅱ)(点击链接进入题目)只出现一次的数字(Ⅲ)(点击链接进入题目)Ⅰ题目描述: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1: 输入: [2,2,1] 输出: 1示例 2: 输入: [4,1,2,1,2] 输出: 4题目分析:抓住规律,不管元素有多少个,只有一个数字出现了一次,其它都出现了两次。本题我们借助异或来解决,异或:相同为0,相异为1,且原创 2021-09-01 10:49:17 · 214 阅读 · 2 评论 -
字符串转整型数字
字符串转整型数字(点击进入题目)描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述: 输入一个字符串,包括数字字母符号,可以为空返回值描述: 如果是合法的数值表达则返回该数字,否则返回0示例1 输入:"+2147483647" 返回值:2147483647示例2 输入:“1a33” 返回值:0题目分析:1、首先需要明确的是,什么是合法的数值表达式,如果该字符串中含有任意字母,则表明该字符串不原创 2021-08-31 10:48:53 · 760 阅读 · 4 评论 -
找出字符串中第一个只出现一次的字符
题目描述: 找出字符串中第一个只出现一次的字符输入描述: 输入几个非空字符串输出描述: 输出第一个只出现一次的字符,如果不存在输出-1示例输入:asdfasdfo aaoo输出:o -1题目分析: 1、首先我们看到示例的输入是多行输入,所以我们在写输入函数的时候就要使用getline函数来防止因回车导致的数据失效。 2、我们从示例输入代码的第一个字符a看起,a在后面还出现过,不符合只出现一次,所以来到第二个字符s,s也在后续出现了,… … …依次往后走,来到了.原创 2021-08-30 18:16:08 · 2558 阅读 · 1 评论