
Leetcode
校招前刷刷leetcode找找状态。每道题都将详细记录我所想到的各种解法,并每种写两份代码,一份C++一份Python
Apale_7
这个作者很懒,什么都没留下…
展开
-
LeetCode 5.最长回文子串
裸的马拉车算法。(当然回文自动机也行)class Solution{public: string longestPalindrome(const string &s) { auto p = manacher(s); return s.substr(p.first - p.second >> 1, p.second - 1); } pair<int, int> manacher(const string &原创 2020-07-12 16:26:39 · 191 阅读 · 1 评论 -
LeetCode 4. 寻找两个正序数组的中位数
累了……以后不放C++了。思路假设第一个数组的长度为s1s1s1,第二个数组的长度为s2s2s2在数组1中选一个位置m1m1m1,将数组分割为两部分,左半部分长度为m1m1m1,右半部分长度为s1−m1s1-m1s1−m1在数组2中也选一个位置m2m2m2进行分割,使得m1+m2==s1−m1+s2−m2m1+m2 == s1-m1+s2-m2m1+m2==s1−m1+s2−m2此时如果m1m1m1左侧的数小于等于m2m2m2右侧的数,且m2m2m2左侧的数小于等于m1m1m1右侧的数,则中位数原创 2020-07-07 21:01:29 · 291 阅读 · 1 评论 -
LeetCode 3.无重复字符的最长子串
遍历字符串s,用数组num(哈希表也行)记录已出现的字符,用队列存储以当前字符为尾的无重复字符的最长子串。当当前字符已出现时,要将上次出现的位置之前的所有字符从队列中删去。遍历过程中队列的最大长度就是最终结果。C++class Solution{public: int lengthOfLongestSubstring(string s) { auto num = vector<char>(128, 0); queue<char>原创 2020-07-06 20:47:10 · 248 阅读 · 1 评论 -
LeetCode 2.两数相加
直接模拟竖式加法即可(题目倒过来存放数字,可以说是极其友善了)。class Solution{public: ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { auto head = new ListNode(0);//ans是带头结点的单链表 auto ans = head; char carry = 0; while (l1 != nullptr &&a原创 2020-07-06 20:04:20 · 212 阅读 · 1 评论 -
LeetCode 1.两数之和
LeetCode 1.两数之和两个想法:1、二分查找记录每个数的下标,按值排序后遍历,二分查找判断是否存在target−atarget-atarget−aC++代码class Solution{public: vector<int> twoSum(vector<int> &nums, int target) { vector<pair<int, int>> p(nums.size()); f原创 2020-07-06 16:44:43 · 239 阅读 · 2 评论