LeetCode算法200+
刷题
FancySuMMer11
这个作者很懒,什么都没留下…
展开
-
LeetCode精选算法200题------(9)246. 中心对称数
本来以为是最简单的方法了,然后看了眼题解才发现天真了。利用差分,进来的时候+1,出去的时候-1,然后遍历,如果连续两次进入就说明重叠了,,,,结果这个方法更慢。思考:本来以为是个贪心。按照左端点排序,遍历区间,如果存在一个区间的左端点比前一个区间的右端点小则返回false。还算比较高质量的题目。主要是这个方法我没想到过。原创 2023-12-29 23:05:24 · 422 阅读 · 1 评论 -
LeetCode精选算法200题------(8)246. 中心对称数
思考:用哈希表记录翻转前后对应的数。然后利用双指针头尾同时遍历字符串,如果遇到不在哈希表里的字符或者是在但两个翻转后并不对应(主要原因是这里所有都是一一对应或对应其本身的,不存在一个环的情况)则直接返回false。学习:没找到什么好的办法,唯一的优化可能是把不包含在哈希表的数存入哈希表,这样不用count函数似乎可能可以快一点?不过本来就是100%。跟之前的易混淆数异曲同工吧。原创 2023-12-29 22:42:02 · 385 阅读 · 1 评论 -
LeetCode精选算法200题------(7)1271. 十六进制魔术数字
把十进制强转为十六进制之后取每位判断下是0-15中的哪一个,如果碰到了2-9就直接返回error,否则把对应字符转成对应字母,利用string类的“+”得到结果,当然,这个结果需要利用reverse反转,因为每次得到的位数会放在最后,因此第一位实际上在字符串的最后一位。就是利用stringstream啦,可以通过读入流里的字符串来直接获得16进制的数字,但是此时需要注意字符串里的数字为小写,因此还要转为大写,其次是这个代码也可以不用“+”,而是直接用下标进行循环。学习:法1:10进制快速转16进制的方式。原创 2023-12-27 16:47:38 · 321 阅读 · 1 评论 -
LeetCode精选算法200题------(5)1064. 不动点
(2)upper_bound返回的是迭代器(类似于指针),因此需要用vector::iterator来记录该迭代器,但是迭代器解引用之后是该对应元素的值而非该元素的下标,因此需要利用distance函数,distance可以返回两个迭代器之间的距离。思考:最简单的办法就是遍历一遍数组,O(n),顺便优化下细节,当时不知道怎么想的,从后往前遍历了,然后遍历到最后一个数组元素大于0的地方结束,如果相同返回值,不同返回-1。简单直白,但是并不是题目所要的解法。一个思路算法都比较简单的题。原创 2023-12-26 09:48:45 · 443 阅读 · 1 评论 -
LeetCode精选算法200题------(6)1064. 易混淆数
然后利用vector存题目数字的每一位,如果这一位在哈希表中找不到则直接返回false。得到的结果一定是所有数字都可以翻转的数。双指针把vector遍历一遍,如果头翻转的数和现在的尾不同,则return true,如果没有不相同则说明这个数翻转后和原来一模一样,则return false。学习:没有找到什么更好的优化。绝大部分题解是把翻转的数字求出再和原数字比较,反而慢了?不知道有没有大佬有更好的题解。思考:用哈希表记录每个能旋转的数,旋转后的数是什么,达到每次访问时O(1)级别的速度。原创 2023-12-26 10:17:58 · 373 阅读 · 3 评论 -
LeetCode精选算法200题------(4)359. 日志速率限制器
思考:用时间轴的方式进行思考。将每个字符串和其出现的时间用哈希表储存,每次遇到该字符串时先判断是否为第一次出现,是则储存,不是则判断其最后一次发送的时间戳+10s与当前时间的大小,如果大于则无法发送,返回false,否则返回true并更新最后一次发送的时间戳。原本的代码将message是否插入单独列为一种情况进行讨论,事实上这么做增加了时间消耗,无论message是否存在都可以进行判断,只需要改变记录的时间为下一次可以出现的时间而非上次出现的时间,这样做便可以把两者合并,事实上应该也是最快的方式。原创 2023-12-25 19:22:49 · 505 阅读 · 0 评论 -
LeetCode精选算法200题------(3)1086. 前五科的均分
写的时候遇到了许多问题。记录一下map的注意点:(1)emplace比insert更快(2)map自动按照key排序,unordered——map 哈希表无序(map本质是红黑树)(3)遍历map可以用auto[a1,a2],好像也可以直接first,second但是leetcode好像不行。可以用map原创 2023-12-24 21:00:21 · 496 阅读 · 0 评论 -
LeetCode精选算法200题------(2)408.有效单词缩写
遍历时分两种情况:1)abbr的指针对应的字符不是数字,则两个指针都往前走。2)abbr的指针对应的字符是数字,则再分情况讨论:1)数字为0,则必然是前导0,直接return false。2)数字不为0,把对应的数字用x保存,如果大于word字符串剩下的字母数则return false,否则比较 word指针加上x后对应的字符 和 abbr指针在碰到数字后碰到的第一个不是数字的字符 是否相同。同时每一次abbr的字符为字母时,将其与目前的word字符串对应位置的字母进行比较,不相同为false。原创 2023-12-23 20:31:01 · 519 阅读 · 0 评论 -
LeetCode精选算法200题------(1)266.回文排列
偶数长度的字符串不能存在任何出现次数为奇数的字符,奇数长度的字符串不能存在大于一个出现次数为奇数次的字符。(因为偶数长度的字符串,出现次数为奇数的字符必然成对出现,因此两种情况都可以用cnt原创 2023-12-22 21:09:54 · 986 阅读 · 0 评论