![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
stupidArthur
这个作者很懒,什么都没留下…
展开
-
[一起刷leetcode吧] 13.Roman to Integer
Roman to Integer题目描述输入一个罗马数字字符串,转换成整性输出分析???是在逗我吧,刚吐槽完上一题,给我来一这个。模拟,暴力;唯一有点小思想的,就是需要判断一下当前是两个字母的还是一个字母的不废话了,上代码代码class Solution {public: int romanToInt(string s) { map<string, int> m; string sub = ""; int value = 0; m["M"] = 100原创 2021-04-18 14:05:05 · 72 阅读 · 0 评论 -
[一起刷leetcode吧] 12.Integer to Roman
Integer to Roman题目描述输入一个整数,将其转换为罗马数字字符串输出分析凑数模拟题,暴力解代码class Solution {public: string intToRoman(int num) { string s = ""; map<int, string> m; int a[13] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; m[1000] = "M"; m[原创 2021-04-18 13:32:43 · 78 阅读 · 0 评论 -
[一起刷leetcode吧] 11.Container With Most Water
Container With Most Water题目描述输入一个int类型的数组h,找到最大的min(h[i], h[j]) * (j - i)分析以前数学和物理竞赛的时候经常说的一句话,题干越短,题目越难其实看了下数据范围 n, h[i] <= 3 * 10 ^ 4代码不写得太烂,应该也能在1秒内跑完;但这个题一定有一个精妙的算法,猜了下应该是O(n),回想了一下我知道的一些算法,应该都不是,于是看了题解。双指针希望下次遇到同样算法的题时,不用看题解了,算法和证明如下:维护原创 2021-04-17 14:24:43 · 85 阅读 · 0 评论 -
[一起刷leetcode吧] 10.Regular Expression Matching
Regular Expression Matching题目描述输入一个字符串s和一个匹配模式p,返回两者是否匹配。匹配规则如下.可以替代任何字符*可以重复其之前的字符任何次数(包括0次)特别的 .*表示任意次数的. 而不是某个确定字符的任意次数分析终于刷到一个DP题了,以前做题的时候总是觉得DP最难,现在最想遇到DP题,不想写数据结构。f[i, j]表示s[:i+1] p[:j+1]是否匹配,状态转移方程如下:s[i] == p[j] or p[j] == '.'f[i, j]原创 2021-04-17 13:49:23 · 62 阅读 · 0 评论 -
[一起刷leetcode吧] 9.Palindrome Number
Palindrome Number题目描述输入一个数,判断是不是回文数分析没错,就是这么简单代码class Solution {public: bool isPalindrome(int x) { int num[12] = {0}, cur = 0; if (x < 0) return false; if (x < 10) return true; while (x > 0) { num[cur] = x % 10; x原创 2021-04-15 22:33:17 · 51 阅读 · 0 评论 -
[一起刷leetcode吧] 8.String to Integer(atoi)
String to Integer(atoi)题目描述输入一个字符串,将其转换为int类型数字,规则如下:1.去掉头部空格2.处理-+3.处理数字4.处理尾部非数字5.若溢出,则取int边界分析模拟,没啥说的代码class Solution {public: int myAtoi(string s) { int cur = 0, len = s.size(), flag = 1; long long ans = 0; while (cur < len &a原创 2021-04-15 22:23:46 · 53 阅读 · 0 评论 -
[一起刷leetcode吧] 7.Reverse Integer
Reverse Integer题目描述输入一个int类型的数,将其反转,如果溢出了,则返回0。分析模拟,为避免中间过程中溢出,在long下面运算(偷了个懒)。代码class Solution {public: int reverse(int x) { if (x == 0) return 0; long raw = long(x), rev = 0, flag = 1, lower = 0, upper = 0; int ans = 0, b[20] = { 0 }原创 2021-04-13 20:22:47 · 65 阅读 · 0 评论 -
[一起刷leetcode吧] 6.ZigZag Conversion
ZigZag Conversion题目描述输入一个字符串s和一个正整数n。将s按照长度为n的Z字形排列。按行输出Z字形字符串。写不清楚,自己去看LeetCode吧。分析直观的两个方法模拟看出每一行的下标的规则看出规则应该比较简单,也没有空间复杂度,O(n)。第一行和最后一行(hang)为一波,中间那几行(hang)为一波。代码class Solution {public: string convert(string s, int numRows) { int len原创 2021-04-13 19:11:36 · 89 阅读 · 0 评论 -
[一起刷leetcode吧] 5.Longest Palindromic Substring
Longest Palindromic Substring题目描述输入一个字符串,输出其中最长的回文子串分析前面那题暴力解了,这个题也想着暴力解。n方循环子串头尾,然后判断该子串是否回文。O(n^3),n<1000。按理说写得好一点也会在1秒内跑出来。但得看常数和机器能力。想了下回文串应该是对称的,不需要n方循环,循环中间的就可以了,这样就变成了O(n^2)算法。不过需要循环两次,奇数和偶数的回文不一样。然后注意下边界,就这样子。代码class Solution {public:原创 2021-04-12 21:03:28 · 61 阅读 · 0 评论 -
[一起刷leetcode吧] 4.Median of Two Sorted Arrays
Median of Two Arrays题目描述输入两个升序数组,输出所有数字的中位数(如果中位数有两个,则为其平均值)分析这题第一感觉应该是个O(log(m+n))的算法。但看了下数据范围,1 <= m + n <= 2000。这不偷懒做个O(m+n)都是对题目的不尊重吧。(两题都刷完再来写O(log(m+n)))。思路应该比较简单,维护两个指针,从两个数组的头开始,哪个数字小就自增,直到达到中位数。处理的时候注意边界值。没什么要分析的。代码class Solution {p原创 2021-04-12 20:24:30 · 55 阅读 · 0 评论 -
[一起刷leetcode吧] 3.Longest Substring Without Repeating Characters
Longest Substring Without Repeating Characters题目描述输入一个字符串,输出其中最长的,没有重复字符的子串长度分析按照标准的思考思路,应该要分析数据范围(s.length <= 50000),那么就不能用O(n^2)算法,排除遍历左右边界的枚举。考虑O(nlogn)和O(n)。这题看着不像能二分的样子,所以O(n)。维护左右边界游标l, r,均只能向右移动,若游标中间的子串s[l, r+1]没有重复字符,则r++,否则l++。是否有重复字符则维护原创 2021-04-11 21:12:45 · 91 阅读 · 1 评论 -
[一起刷leetcode吧] 2. Add Two Numbers
Add Two Numbers题目理解输入两个单向列表,输出两个列表进行十进制加法的结果分析模拟最原始的十进制加法,进行加法和进位处理,判断链表有没有用完代码class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* l3 = new ListNode(); ListNode* cursor = new ListNode(); cursor = l3; i原创 2021-04-11 21:03:50 · 74 阅读 · 0 评论