![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
Hecttttttttt
这个作者很懒,什么都没留下…
展开
-
leetcode:1309. 解码字母到整数映射(c++)
这种映射题目的一种想法是找到它和初值的差距,然后与初值加和即可。class Solution {public: string freqAlphabets(string s) { int map = 96; // a前面一个数的ascii码 string res; // 结果字符串 for(int i = 0; i < s.size(); i ++) //遍历s字符串 { //分两种情况,没遇到原创 2020-06-26 11:24:51 · 325 阅读 · 0 评论 -
leetcode50:Pow(x,n)(c++)
本题有两个地方需要考虑。1.正负号题目的n取值范围为−231-2^{31}−231到2312^{31}231。如果n取−231-2^{31}−231,直接取该值负号,会出现内存溢出现象。所以我们可以定义一个long类型再取负号,或使用abs函数。2.暴力法超时问题很多小伙伴会先想到逐个逐个乘,但这样在数值大的时候会超时。、针对这个问题,我们可能尽可能增大基底x,减小幂次n。比如2的10次方,可以写成4的5次方,还可以写成416^2,最后写成4256。n为偶数:xn=(x2)n/2x^n原创 2020-05-29 14:07:10 · 272 阅读 · 0 评论 -
leetcode:c++实现用队列实现栈,用栈实现队列
实际上,我们只要把握住栈和队列的特点,就不难做这道题。栈的特点是先进后出队列的特点是先进先出用队列实现栈首先我们先看队列实现栈,要求实现栈的以下函数:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空首先,push()和empty()两个函数是直接调用队列的push()和empty()函数即可,不需要其他操作。然后是pop()和top()函数,假设在栈中存储了1,2,3,4,5,6 。那么此时栈顶是6,p原创 2020-05-22 19:19:34 · 297 阅读 · 0 评论 -
leetcode371:两整数之和
理所当然会想到c++的位运算。1.在不考虑进位的情况下,直接对a、b取异或操作即可。 a^b2.然后再考虑进位的情况,两个数在相同的位置下,都为1才会进位,那么我们就可以用与运算,再左移一位,得到要进位的数。(a&b) << 13.然后让这两个数做异或运算,得到下一轮的不考虑进位情况的数。因为可能还有进位,所以又从步骤2开始,循环直到(a&b) <&l...原创 2020-04-18 00:12:37 · 248 阅读 · 0 评论 -
leetcode263:丑数
思路:让num分别除以2,3,5,如果有能整除的数就往下走,令num=num/能整除的数,直到num为1时,那么说明这个数是丑数。如果当前num无法整除2,3,5,说明就是false。 bool isUgly(int num){ int a[3] = {2,3,5}; if(num == 0) { return false;} w...原创 2020-04-17 22:55:32 · 172 阅读 · 0 评论 -
leetcode884:两句话中不常见的词
使用map存储每个词的次数,遍历两句话,次数为1的即为不常见的词。其中判断是否等于空格的十进制数32,若等于,则说明一个词结束了。 vector<string> uncommonFromSentences(string A, string B) { map<string,int> mymap; int pos = 0 ; ...原创 2020-04-17 21:30:54 · 299 阅读 · 0 评论 -
leetcode面试题13:机器人的运动范围
此题依旧采用暴力法&BFS两种方法。首先要看懂题目,例如如 let m = 20, n = 15, k = 9,下图绿色的代表能走的,红色的代表超过个位数的sum。图源于此。但题目是有限制的,“每次可以向左、右、上、下移动一格(不能移动到方格外)”,意思是右下角那一块绿色没办法走到(机器人不可能穿墙)。我们首先使用暴力求解,思路:从左到右,从上到下遍历,判断当前位置的左边和上边机...原创 2020-04-11 00:15:27 · 264 阅读 · 0 评论 -
leetcode面试题01.07:旋转矩阵
本题可以先找规律。遍历蓝色框数字,找到对应的其余三个数字,交换即可。假设当前为matrix[i][j],其余三个数分别为:[j][m_size-i-1][m_size-i-1][m_size-j-1][m_size-j-1][i]代码: void rotate(vector<vector<int>>& matrix) { int...原创 2020-04-07 10:34:22 · 206 阅读 · 0 评论 -
leetcode448:找到所有数组中消失的数字
打卡简单题,思路就是先排序,定义两个计数变量,一个是当前要对比的数字,一个是计算有多少个重复的数字。遍历所有数字,先判断是否和上一个数字相等,相等的话就continue,同时重复数字+1,若不相等,判断是否和当前要对比的数字不等,不等则存入result数组,且重复数-1(重复数是为了判断 数组最大数后面是否还有缺失数,有的话后面补全)。遍历完成之后,若重复数大于0,则把后面缺失的数都补进resu...原创 2020-04-06 23:27:55 · 222 阅读 · 0 评论 -
leetcode8:字符串转换整数
四月份的leetcode都好难,都是中等的啊。今天要实现的实际上是atoi函数。解题关键点在于:1.要区分空格,正负号符号,数字符号,和其他符号2.数字符号或者是正负号符号一旦开始了,下一个数就不能是正负号符号或其他符号3.要考虑溢出情况要知道符号代表的整型,可以去查看ascii表。整体思路为:遍历所有数字,先把数字前空格去掉,遇到非空字符时,先判断是不是其他符号,如果不是的话,对号...原创 2020-04-03 22:08:26 · 208 阅读 · 0 评论 -
leetcode912:排序数组
题目没什么好说的,就是用排序算法得到从大到小的数组。目前只会冒泡排序- -毫无意外的超出时间限制了。 vector<int> sortArray(vector<int>& nums) { for(int i = 0; i < nums.size(); i ++) { for(int j = 0;...原创 2020-04-01 09:59:22 · 220 阅读 · 0 评论 -
leetcode914:卡牌分组
今日打卡,仍然是暴力解,效率很低。思路就是先把每个数存进map里,key是deck的数,value是这个数的个数,然后从遍历2到10000(题目限制了10000),看是否所有次数都能除尽,若所有值的个数都能除尽,说明这个数是他们的最大公约数,即返回正确,如果找不到这个数,那么当然就返回false啦。另一种思路:其实就是计算所有数个数的最大公约数,也可以这么做。源码:bool hasGroup...原创 2020-03-27 11:40:00 · 140 阅读 · 0 评论 -
leetcode999:车的可用捕获量
今日打卡,暴力破解!先找到R的位置,然后固定横轴扫描R的左侧和右侧;再固定纵轴扫描R的上侧和下侧,碰到卒就增加1并且break,碰到墙壁或象就退出。因为已经告诉你是在8*8矩阵里操作,所以下面直接用。源码: int numRookCaptures(vector<vector<char>>& board) { int heng ,zong ...原创 2020-03-26 19:19:12 · 193 阅读 · 0 评论 -
leetcode面试题17.16按摩师
解题思路:这实际上是一个动态规划问题。思路是遍历一次,当前索引对应的值 变为 当前值和之前值和的最大值,因为必须至少相隔1个位置,所以要么选i-2索引,要么选i-3索引作为之前的和,到最后返回nums.size()-1索引的值或是nums.size()-2索引的值,可能有点绕口,其实核心就是当前值 变为 是对之前值的求和,看代码应该是好懂的。时间复杂度均为O(n),空间复杂度为O(1)int ...原创 2020-03-24 22:27:55 · 135 阅读 · 0 评论 -
leetcode414:第三大的数
思路:先把所有数字排序,然后定义一个map来存取,key为nums的值,value为nums出现的次数。这样就可以滤掉多余的数,当然你不采用map的方法,而删除掉多余的数也可以。然后再定义一个map迭代器,返回相应的数即可。使用map方法来做:int thirdMax(vector<int>& nums) { map<int,int> sortnums;...原创 2020-03-20 12:44:47 · 211 阅读 · 0 评论 -
leetcode面试题40:最小的k个数
今日打卡,排序+返回前k个数即可。主要就是考察排序。本来尝试自己写了一个冒泡排序法,可是超出时间限制,于是直接用了内置的排序。冒泡排序: for(int i = 0 ; i < arr.size() - 1; i++) { for(int j = i + 1; j < arr.size() ; j++) { i...原创 2020-03-20 09:14:09 · 156 阅读 · 0 评论 -
leetcode409:最长回文数
本题要求:找到可构成回文数的最大个数res本题实可以这么做:找出字符串中字母的个数1.如果该字母能被2整除,那么说明可以构成回文,加到res去;2.如果该字母不能被2整除,但大于1,比如3,那么可以减1,然后剩下的个数可以构成回文数,加到res去。3.遍历完再判断一下,如果res小于字符串的个数,说明可以随便拿一个数放中间,这样回文字符串就是奇数了,那么把这个数加到res去。int lo...原创 2020-03-19 08:33:16 · 554 阅读 · 0 评论 -
leetcode836:矩形重叠
因为重叠的情况有很多种,所以我们考虑不重叠的情况。要使矩形1与矩形2不重叠,那么矩形1必然在矩形2的四周。分成四部分。如下图:bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2){ if(rec1[0] >= rec2[2] || rec1[1] >= rec...原创 2020-03-18 21:51:14 · 171 阅读 · 0 评论 -
leetcode1160:拼写单词
题目的意思很简单,就是要看字母表字符串能否拼出单词,能拼出就把单词的字母大小加上。比较坑的是,每次拼写,字母表中的每个字符只能用一次,不然的话可以用find函数,循环遍历的时候find一下看该字符串在不在字母表里就行了。每个字符只能用一次,这意味着要么你记录这个字符用没用过,要么你先记录单词的数量,然后用一次减一次。这里使用了哈希法,把字母表字符串的个数记录下来。然后循环遍历,每次遇到个数为...原创 2020-03-17 22:18:56 · 166 阅读 · 0 评论 -
leetcode面试题:字符串压缩
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。划重点:1.重复字符串提取个数2.最后返回的字符串是 字符+字符出现个数3.如果压缩完字符串size大于等于原字符串size,则返回原先字符串。比较要注意的...原创 2020-03-16 20:23:58 · 324 阅读 · 1 评论 -
leetcode1071:字符串的最大公因子
理解题目的意思,给定的两个字符串str1和str2,要求除尽字符串X。除尽的意思就是可以由多个X来表示str1和str2。把X当成一份字符串,一份字符串的大小大于等于1.str1 = AXstr2 = BX目的是求X。由上面式子,可以先判断是否能被除尽,能被除尽时,要满足:str1 + str2 = str2 + str1然后满足能被除尽之后,用gcd算法,即辗转相除法。辗转相除...原创 2020-03-16 19:41:03 · 163 阅读 · 0 评论 -
leetcode520:检测大写字母
三种情况是正确的:全是大写全是小写第一个是大写,其他是小写思路就是:先判断特殊情况,如果是只有一位或没有位数,则返回正确。判断是否是大小写,可通过ascii码表来看,整数65~90代表大写。再判断第一个情况,如果第一个为大写,则后面全大写或全小写都行。如果第一个为小写,则后面只能小写。然后遍历,标志位分别加1遍历完判断是否满足以上三种符合的情况代码:bool det...原创 2020-03-15 23:19:42 · 206 阅读 · 0 评论 -
leetcode1013:将数组分成和相等的三个部分
刚看题目就感觉不会做了~然后洗澡的时候想了想,这不挺简单的吗。思路:定义一个vector,存入当前数值和之前数值之和,然后取最后一个数除以3 = a,再判断该vector里有没有a和2a,且a的索引必须小于2abool canThreePartsEqualSum(vector<int>& A) { int sum = 0; int fen; int ...原创 2020-03-11 22:02:46 · 297 阅读 · 0 评论 -
leetcode57:和为S的正数连续序列
leetcode打卡,没什么技巧,执行太耗时了。。。vector<vector<int>> findContinuousSequence(int target){ vector<vector<int>> result; int sum = 0; int result_index = 0; int start_ind...原创 2020-03-06 14:48:29 · 233 阅读 · 0 评论 -
leetcode994(c++):腐烂的橘子
第一次做这种题,看了题解之后知道原来是使用一种叫“BFS”的方法来解,即广度优先遍历。个人理解:关于BFS,广度优先遍历,思想很简单,先定义一个队列,心中要有一个树的结构,每次只搜索树的一层,搜索到当前节点就把当前节点的母节点从队列中删除,同时将自己入队,当搜索到最后一层,队列中还有最后一层节点,再做一次循环,没有下一节点了,同时把上一轮(最后一层)的结点释放了,那么搜索就完成了,退出循环。至...原创 2020-03-05 21:45:04 · 581 阅读 · 0 评论 -
leetcode1103:分糖果
题目的意思很简单,第一个小朋友从1个糖开始发,第二个小朋友发2个,第num_people个小朋友发num_people个,发完一轮,还有糖,继续发,第二轮时,第一个小朋友发num_people+1,第二个小朋友发num_people+2,地num_people个小朋友发2×num_people个。如果还有,那么第三轮,2×num_people +1个实际上,发多少个苹果可以直接由一个变量确定,每...原创 2020-03-05 20:49:57 · 200 阅读 · 0 评论 -
leetcode29(c++):两数相除
题目:给定两个整数,两数相除但不能用乘法、除法和mod运算符。且:被除数和除数均为 32 位有符号整数。除数不为 0。假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231-2^{31}−231, 2312^{31}231 − 1]。本题中,如果除法结果溢出,则返回 2312^{31}231 − 1。思路简单来说,这题就是要求被除数中能分出多少个除数出来。那么这...原创 2020-03-04 00:48:10 · 532 阅读 · 0 评论