【LeetCode 4-5】4.Median of Two Sorted Arrays 5.Longest Palindromic Substring
来源:互联网 发布:sqlserver 图标 编辑:程序博客网 时间:2024/06/06 02:06
4.Median of Two Sorted Arrays
这题在网站上标注的难度为hard,实际则不难。
一句话思路:因为两个数组已经排序了,只需从小到大取 (len1+len2)/2+1个数,组成一个新合并数组,保存最后的两位结果,然后根据len1+len2是奇数还是偶数取最后一位或者两位的平均数即可。
这是我第一次写的代码: 时间复杂度应该是O(length)吧,空间都是常数,应该是O(1),但是提交后,发现运行时间长,只击败了5.78%
class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int length = (nums1.size() + nums2.size()) / 2 + 1; double result[2]; int len1 = 0, len2 = 0, i = 0; while(i < length){ while (i < length && len1 < nums1.size() && len2 < nums2.size() && nums1[len1] <= nums2[len2]) { result[i%2] = nums1[len1]; len1++; i++; } while (i < length && len1 < nums1.size() && len2 < nums2.size() && nums1[len1] > nums2[len2]){ result[i%2] = nums2[len2]; len2++; i++; } while (i < length && len1 >= nums1.size() && len2 < nums2.size()){ result[i%2] = nums2[len2]; len2++; i++; } while (i < length && len2 >= nums2.size() && len1 < nums1.size()){ result[i%2] = nums1[len1]; len1++; i++; } } double db = (nums1.size() + nums2.size()) % 2 == 0 ? (double(result[0] + result[1]) /2 ) : max(result[0],result[1]); return db; }};
5.Longest Palindromic Substring
一句话思路:回文字符串,一个很自然的想法就是一边从头开始扫描,一边为尾巴开始扫描,使用一个O(n^2)的算法进行枚举,但是超时了,用来想用multimap来保存相同字符串的下标,减少一层循环,不过想到类似“1111111111111111111111……111“这种情况,最坏情况还是会出现O(n^2),最后通过加了一个对最大长度的判断,小优化卡过 看了结果,竟然还击败了21%的结果!
class Solution {public: string longestPalindrome(string s) { int maxstart = 0, maxsize = 1; for(int i = 0; i < s.size(); i++){ for(int j = s.size() - 1; j > i && j - i + 1 > maxsize ; j--){ if(s[i] == s[j] && isPalin(s, i, j)){ maxsize = j - i + 1; maxstart = i; break; } } } return s.substr(maxstart, maxsize); } bool isPalin(const string& s, int i, int j){ int size = j - i + 1; if(size % 2 == 0){ while(s[i] == s[j] && i < j -1 ){ i++; j--; } if(s[i] == s[j] && i == j - 1) return true; } if(size % 2 == 1){ while(s[i] == s[j] && i != j){ i++; j--; } if(i == j) return true; } return false; } };
看了下讨论区的代码,另外一种比较巧妙的实现方法,从回文传的中间往左右两边检查,速度更快,而且可以省去判断字符串长度奇偶数的问题
同时,在循环里关于maxlen的判断,使用size - i > maxlen / 2,更明显
class Solution {public: std::string longestPalindrome(std::string s) { if (s.size() < 2) return s; int len = s.size(), max_left = 0, max_len = 1, left, right; for (int start = 0; start < len && len - start > max_len / 2;) { left = right = start; while (right < len - 1 && s[right + 1] == s[right]) //对于往右扩展遇到相邻的字符串是相同的,一定都是回文串,形如 x‘bbb’y 或'x 'bbbb' y ++right; start = right + 1; while (right < len - 1 && left > 0 && s[right + 1] == s[left - 1]) { ++right; --left; } if (max_len < right - left + 1) { max_left = left; max_len = right - left + 1; } } return s.substr(max_left, max_len); }};
7.Reverse Integer
比较简单的一题,有两处想复杂了,一是一开始就想着转成字符串去处理,然后一直在找int和string之间的转换的函数,第二是关于overflow的判断,溢出后应该是会变为负数之类的,而不是直接崩溃,直接如以下代码中判断是否与自己预期的数相等即可
class Solution {public: int reverse(int x) { int ans = 0; while(x){ int temp = ans * 10 + x % 10; if(temp / 10 != ans) return 0; ans = temp; x = x /10; } return ans; }};
- 【LeetCode 4-5】4.Median of Two Sorted Arrays 5.Longest Palindromic Substring
- 【leetcode 002】Longest Substring Without Repeating Characters || Median of Two Sorted Arrays
- [LeetCode]4.Median of Two Sorted Arrays
- LeetCode 4. Median of Two Sorted Arrays
- LeetCode --- 4. Median of Two Sorted Arrays
- [Leetcode] 4. Median of Two Sorted Arrays
- [LeetCode]4.Median of Two Sorted Arrays
- 【leetcode】4. Median of Two Sorted Arrays
- Leetcode-4.Median of Two Sorted Arrays
- LeetCode-4.Median of Two Sorted Arrays
- Leetcode 4. Median of Two Sorted Arrays
- leetcode 4. Median of Two Sorted Arrays
- LeetCode 4. Median of Two Sorted Arrays
- Leetcode 4. Median of Two Sorted Arrays
- Leetcode 4. Median of Two Sorted Arrays
- [leetcode]4. Median of Two Sorted Arrays
- LeetCode-4.Median of Two Sorted Arrays
- [LeetCode]4. Median of Two Sorted Arrays
- 栈和队列判断回文数
- 匿名函数、嵌套函数、闭包是怎么回事?
- 1047. 编程团体赛(20)
- Linux中进程通讯--信号量
- INSERT 语句与 FOREIGN KEY SAME TABLE 约束"FK__Course__Cpno__1367E606"冲突。该冲突发生于数据库"student",表"dbo.Course",
- 【LeetCode 4-5】4.Median of Two Sorted Arrays 5.Longest Palindromic Substring
- Java五种字符串连接的性能比较
- 单向循环链表C语言实现
- 贪心算法——完美的代价
- 第八周项目三(4)—顺序串算法之串中字符的替换
- 代码块、继承、final关键字
- 初识Linux--Linux常用的命令小结
- C#引用win32API
- contenttypes框架