LeetCode
ShyWindyy
这个作者很懒,什么都没留下…
展开
-
17. 电话号码的字母组合
这是一道暴搜的题目(深搜),把组合空间想象成一棵树,由上至下搜索。实现的时候有一些小细节,比如存好的string数组,比如dfs的写法,注意体会。path:搜索路径(已有的(部分)答案)。idx:当前搜索的字符位置;dfs,字符串处理。原创 2022-09-23 20:32:46 · 151 阅读 · 0 评论 -
16. 最接近的三数之和
双指针能做的题, 首先考虑朴素做法。双指针能够将其复杂度降低一次(原因在于,就本题而言,j和k会互相接近而后停止,二者总共遍历的数据量是O(n),从而降低了复杂度)。利用双指针首先别忘了排序/狗头,不然累死也找不出bug 5555。这道题与上一次的均可以用双指针算法。再做一下加深对双指针的理解吧。具体思路与上面一题三数之和类似,不再赘述。原创 2022-09-23 08:59:06 · 129 阅读 · 0 评论 -
LeetCode 15. 三数之和 c++
首先明确双指针做法要有序,然后控制好枚举的三个指针之间大小的绝对关系,要维护好,最后要做到去重(啃题牛!continue就完事儿了)这道题时经典面试题。典型的做法是排序加双指针。几个要点,做题时可以逐个考虑。原创 2022-09-22 20:39:01 · 349 阅读 · 0 评论 -
14. 最长公共前缀 - 力扣C++
一、思路简单题目,贵在快速写出简洁明了的代码。用strs[0]的各个字符与容器各位比较。可以出结果的几种情况:strs[0]已经遍历完成 对比其它字符时出现不同 其它字符结束,此时也退出二、新知容器与容器遍历,string三、代码class Solution {public: string longestCommonPrefix(vector<string>& strs) { string res; if(strs.e原创 2022-01-07 12:25:56 · 477 阅读 · 0 评论 -
13. 罗马数字转整数 - 力扣C++
一、思路代码之美!合理使用数据结构的重要!!这题要是写条件分支,就显得太憨厚老实了hhh使用哈希表,建立字符与对应数值的映射关系。最终要的一点,理解题意。思路清晰的解决这道题目的关键就是理解各种组合背后的含义,而不能只看成字符组合。要在规律中寻求通法。比如对于III和II,区别在于多一个I,数值上相差一个I的值,那么在处理时,就可以对逐个I进行分别处理并累加即可。特殊的,对于形如CD这样,后者比前者大,只需多向后看一步即刻,前者减去,后加加上。代码很整洁。二、新知找规律,处理特殊。...原创 2022-01-07 12:01:31 · 625 阅读 · 0 评论 -
12. 整数转罗马数字 - 力扣C++
一、思路模拟题,没啥好说的。要啥函数做啥函数就行,大胆写。二、代码class Solution {public: string intToRoman(int num) { string res; int a[4]; for(int i = 0; i < 4; i ++){ a[i] = num % 10; num /= 10; } for(int...原创 2022-01-07 10:54:45 · 485 阅读 · 0 评论 -
11. 盛最多水的容器 - 力扣C++
原题链接:11. 盛最多水的容器 - 力扣(LeetCode) (leetcode-cn.com)一、思路这是一道思维题,比较考验状态和人品。一般很难想,但是尝试画图分析后还是很容易理解的。首先,算法的思路是,用两个指针分别指向height的始末,然后异步向中间靠拢,哪个指针所指较小,就移动哪一个指针。这方法听起来好像没什么依据hh,但是可以证明是正确的。证明方法如下:如图一、二所示,我们假设红线是对应的最优解,左侧红线高于右侧红线,在i, j向中间靠拢时,必然有一个会先碰原创 2022-01-07 09:42:11 · 135 阅读 · 0 评论 -
9. 回文数 - C++
一、思路要啥思路,来一道简单题奖励一下自己。转换成字符串然后求反;取出全部数字,重新构成数字,然后比价大小。long long zhen xiang!(解决很多溢出问题,懒人福音)二、代码 1 2 3 4 5 6 7 8 9 10 11 12 13 ...原创 2022-01-06 13:25:51 · 90 阅读 · 0 评论 -
8. 字符串转换整数 (atoi) - C++
一、思路这是一道模拟题,细节多,容易出错,容易修修补补搞坏心态,让代码混乱不规整。中间有个溢出处理的问题(这题烂掉了hhh,代码零乱不堪,已经不想改啦)。还是要注意防溢出问题,转换表达式,这一题还涉及到无符号数变为有符号数时的转换溢出,已经麻掉了。感觉修修补补的代码还是有漏洞,不过LeetCode已经过了。二、代码 1 2 3 4 5 6 7 8...原创 2022-01-06 13:09:04 · 136 阅读 · 0 评论 -
7. 整数反转 - c++
原题链接:7. 整数反转 - 力扣(LeetCode) (leetcode-cn.com)一、思路两种思路,一是用to_string转换成字符串进行处理,反转再转回。这种方法略有取巧意味,这里不用。另外有一种思路是逐个取出每位数字(利用取模与除法),再进行反转(秦九韶)。需要另外注意的一点是,c++对负数取模运算,得到的结果为负。可以验证,这里对正负采用相同的式子结果同样正确。注意这里有个问题,感觉原题目稍有歧义。不是很理解这个不允许存储64位数字是限制,还是答案的背景(因为在解..原创 2022-01-06 11:30:28 · 800 阅读 · 1 评论 -
6. Z 字形变换 - C++
一、思路找规律的一道题,打草稿,找规律,实现即可。找出公差,逐行处理,注意细节。二、代码class Solution { public: string convert(string s, int numRows) { string res; if(numRows == 1) return s; int d = 2*(numRows - 1); int a[numRows], b[numRows]; ...原创 2022-01-06 10:37:21 · 105 阅读 · 0 评论 -
5. 最长回文子串 - 力扣C++
原题链接:5. 最长回文子串 - 力扣(LeetCode) (leetcode-cn.com)一、思路首先,将回文字符串分为两种,总长为奇数或者偶数来进行处理。从第一个字符开始向后枚举,然后以枚举点为中心,向两边延伸至边界(左边界是0,右边界是s.size() 。每次将结果与上一个结果进行比较。遍历完成后获得答案。时间复杂度:o(n^2)二、补充知识点字符串处理三、代码class Solution { public: string longestPalindro..原创 2022-01-06 08:53:13 · 351 阅读 · 0 评论 -
3.LeetCode. [无重复字符的最长子串]
#LeetCode3. 无重复字符的最长子串#一、内容与要点分析内容:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。双指针 i,j哈希表 unordered_map滑动窗口 j ++, i ++时间复杂度由暴力的n^2,降为n#二、思路分析对于一般情况,j在前,i在后(啊啊啊Markdown存图片有没有好的方案啊555菜鸡落泪),i后移,对s[i + 1]进行加1,(哈希表存储的是j~i中各字符出现的次数),如果s[i+1] > 1,那么新加入的字符必然原创 2022-01-03 12:26:16 · 232 阅读 · 0 评论 -
2.[两数相加]
#2.两数相加一、内容与要点分析虚拟头结点加上虚拟头结点,就不用特判了,非常好用。具体做法是: auto dummy = new ListNode(-1), cur = dummy;一道简单的模拟题这道题旨在模拟小学的加法运算,思路不难,贵在简介清晰。二、代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *原创 2022-01-03 10:55:32 · 247 阅读 · 0 评论 -
1.LeetCode 两数之和
#1.两数之和##一、思路:暴力算法是O(n^2)的枚举,如果用哈希表,枚举一个数同时,在哈希表中查询 target - nums[i] 是否在表中,如果在,那就是找到了答案{heap[nums[i]], i}。将该数也加入到哈希表中,开始下一次循环。###1、哈希表的实现:unordered_map<int, int> heap;//c++11##2、关于unordered_mapunordered_map 容器,直译过来就是"无序 map 容器"的意思(map 底层是平衡树)。原创 2021-12-31 11:49:18 · 177 阅读 · 0 评论