- 博客(15)
- 收藏
- 关注
原创 17. 电话号码的字母组合
这是一道暴搜的题目(深搜),把组合空间想象成一棵树,由上至下搜索。实现的时候有一些小细节,比如存好的string数组,比如dfs的写法,注意体会。path:搜索路径(已有的(部分)答案)。idx:当前搜索的字符位置;dfs,字符串处理。
2022-09-23 20:32:46
196
原创 16. 最接近的三数之和
双指针能做的题, 首先考虑朴素做法。双指针能够将其复杂度降低一次(原因在于,就本题而言,j和k会互相接近而后停止,二者总共遍历的数据量是O(n),从而降低了复杂度)。利用双指针首先别忘了排序/狗头,不然累死也找不出bug 5555。这道题与上一次的均可以用双指针算法。再做一下加深对双指针的理解吧。具体思路与上面一题三数之和类似,不再赘述。
2022-09-23 08:59:06
172
原创 LeetCode 15. 三数之和 c++
首先明确双指针做法要有序,然后控制好枚举的三个指针之间大小的绝对关系,要维护好,最后要做到去重(啃题牛!continue就完事儿了)这道题时经典面试题。典型的做法是排序加双指针。几个要点,做题时可以逐个考虑。
2022-09-22 20:39:01
405
原创 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
523
原创 13. 罗马数字转整数 - 力扣C++
一、思路 代码之美!合理使用数据结构的重要!!这题要是写条件分支,就显得太憨厚老实了hhh 使用哈希表,建立字符与对应数值的映射关系。最终要的一点,理解题意。思路清晰的解决这道题目的关键就是理解各种组合背后的含义,而不能只看成字符组合。要在规律中寻求通法。比如对于III和II,区别在于多一个I,数值上相差一个I的值,那么在处理时,就可以对逐个I进行分别处理并累加即可。特殊的,对于形如CD这样,后者比前者大,只需多向后看一步即刻,前者减去,后加加上。代码很整洁。 二、新知 找规律,处理特殊。 ...
2022-01-07 12:01:31
680
原创 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
530
原创 11. 盛最多水的容器 - 力扣C++
原题链接:11. 盛最多水的容器 - 力扣(LeetCode) (leetcode-cn.com) 一、思路 这是一道思维题,比较考验状态和人品。一般很难想,但是尝试画图分析后还是很容易理解的。 首先,算法的思路是,用两个指针分别指向height的始末,然后异步向中间靠拢,哪个指针所指较小,就移动哪一个指针。 这方法听起来好像没什么依据hh,但是可以证明是正确的。证明方法如下: 如图一、二所示,我们假设红线是对应的最优解,左侧红线高于右侧红线,在i, j向中间靠拢时,必然有一个会先碰
2022-01-07 09:42:11
168
原创 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
122
原创 8. 字符串转换整数 (atoi) - C++
一、思路 这是一道模拟题,细节多,容易出错,容易修修补补搞坏心态,让代码混乱不规整。中间有个溢出处理的问题(这题烂掉了hhh,代码零乱不堪,已经不想改啦)。 还是要注意防溢出问题,转换表达式,这一题还涉及到无符号数变为有符号数时的转换溢出,已经麻掉了。感觉修修补补的代码还是有漏洞,不过LeetCode已经过了。 二、代码 1 2 3 4 5 6 7 8...
2022-01-06 13:09:04
188
原创 7. 整数反转 - c++
原题链接:7. 整数反转 - 力扣(LeetCode) (leetcode-cn.com) 一、思路 两种思路,一是用to_string转换成字符串进行处理,反转再转回。这种方法略有取巧意味,这里不用。 另外有一种思路是逐个取出每位数字(利用取模与除法),再进行反转(秦九韶)。需要另外注意的一点是,c++对负数取模运算,得到的结果为负。可以验证,这里对正负采用相同的式子结果同样正确。 注意这里有个问题,感觉原题目稍有歧义。 不是很理解这个不允许存储64位数字是限制,还是答案的背景(因为在解..
2022-01-06 11:30:28
864
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
138
原创 5. 最长回文子串 - 力扣C++
原题链接:5. 最长回文子串 - 力扣(LeetCode) (leetcode-cn.com) 一、思路 首先,将回文字符串分为两种,总长为奇数或者偶数来进行处理。从第一个字符开始向后枚举,然后以枚举点为中心,向两边延伸至边界(左边界是0,右边界是s.size() 。每次将结果与上一个结果进行比较。遍历完成后获得答案。时间复杂度:o(n^2) 二、补充知识点 字符串处理 三、代码 class Solution { public: string longestPalindro..
2022-01-06 08:53:13
386
原创 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
260
原创 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
278
原创 1.LeetCode 两数之和
#1.两数之和 ##一、思路: 暴力算法是O(n^2)的枚举,如果用哈希表,枚举一个数同时,在哈希表中查询 target - nums[i] 是否在表中,如果在,那就是找到了答案{heap[nums[i]], i}。将该数也加入到哈希表中,开始下一次循环。 ###1、哈希表的实现: unordered_map<int, int> heap;//c++11 ##2、关于unordered_map unordered_map 容器,直译过来就是"无序 map 容器"的意思(map 底层是平衡树)。
2021-12-31 11:49:18
207
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人