假期刷题 LeetCode
程程程乘什么
这个作者很懒,什么都没留下…
展开
-
LeetCode:5 最长回文子串
这道题与516题有一定的相似,只是一个是回文子序列,返回的是长度。一个是回文子串,返回的是字符串。一个比较好的解法汇总:动态规划、Manacher 算法一开始看了别人的思路,但是自己怎么写都不通过,后来发现原因在于:dp[i][j] = len==1 || len==2 || dp[i+1][j-1] && (s[i] == s[j]); 没有加括号,导致的后果:...原创 2020-02-27 17:51:36 · 107 阅读 · 0 评论 -
LeetCode:516 最长回文子序列
典型的动态规划题,可以用递归、迭代两种形式来解。首先引用一篇讲子序列问题的好文章:子序列问题通用思路|最长回文子序列以下内容引自上文:子序列问题是常见的算法问题,而且并不好解决。首先,子序列问题本身就相对子串、子数组更困难一些,因为前者是不连续的序列,而后两者是连续的,就算穷举你都不一定会,更别说求解相关的算法问题了。而且,子序列问题很可能涉及到两个字符串,比如前文「最长...原创 2020-02-27 22:53:08 · 170 阅读 · 0 评论 -
LeetCode 198:打家劫舍
简单的DP问题,因为状态转移方程仅仅和当前元素的前几个节点有关,因此不需要维护一个dp一维数组,和跳台阶问题一样,仅仅需要维护几个元素即可。class Solution {public: int rob(vector<int>& nums) { if(nums.empty()) return 0; int n...原创 2020-02-26 17:25:00 · 103 阅读 · 0 评论 -
LeetCode:300 最长上升子序列 (最优方法是:动态规划 + 二分法)
第一种简单粗暴地解法:递归求解状态转移方程,属于Up-Down方法,因为子问题的重复求解,导致时间复杂度O(2^n)一个语法点:想用全局变量,可以直接设置类的成员变量,不应该像 java 那样用 static 静态变量!这一点很容易被忽视!class Solution {private: int max; int f(vector<int>&a...原创 2020-02-26 16:08:37 · 214 阅读 · 1 评论 -
LeetCode: 91 解码方法
这道题一开始以为是简单的递归问题,按照从前往后的顺序递归,总是在“10”这个输入上报错。按照从后向前的方法递归,应对短序列没有问题,但是面对长序列,因为存在大量重复计算,所以超时。如果用递归来做,应该用记忆化递归!class Solution {public: int numDecodings(string s) { //if(s == "0" || s =...原创 2020-02-27 23:59:08 · 839 阅读 · 0 评论 -
LeetCode:第177场周赛 1361
class Solution {public: bool validateBinaryTreeNodes(int n, vector<int>& leftChild, vector<int>& rightChild) { deque<int> q; q.push_back(0); ...原创 2020-02-23 15:47:16 · 99 阅读 · 0 评论 -
LeetCode:215 数组中第K大的数
class Solution {public: int findKthLargest(vector<int>& nums, int k) { if(nums.size() < k || k < 1) return -1; int left = 0, right = nums.size()-1; while(...原创 2020-02-22 16:36:18 · 222 阅读 · 0 评论 -
LeetCode 147:对链表进行插入排序
指针的操作比较繁琐复杂,需要捋清楚再写,中间犯了3个错误:class Solution {public: ListNode* insertionSortList(ListNode* head) { if(!head || !head->next) return head; //Bug2:不应该是nullptr,应该是head ListNod...原创 2020-02-22 12:20:49 · 153 阅读 · 1 评论 -
LeetCode:212 单词搜索Ⅱ
这道题是DFS+前缀树,是一道标准的模板题这里面的Tire类的定义写的方法与之前的208略有不同,但基本上一样。只是单独定义了一下TireNode节点类。//定义节点,类/结构体class TireNode {public: TireNode(){ } bool isEnd = false; vector<TireNode*> next...原创 2020-02-19 14:53:28 · 128 阅读 · 0 评论 -
LeetCode:208 实现字典树
基础的数据结构,实现方法完全可以根据思路背下来。class Trie {private: bool isEnd; Trie* next[26];public: /** Initialize your data structure here. */ Trie() { isEnd = false; memset(next, 0...原创 2020-02-18 13:05:29 · 117 阅读 · 0 评论 -
LeetCode 347:最高频的 K 个元素
很重点的一道题,是剑指Offer,LeetCode里面常见的另一道题:返回数组里最小/大的K个元素进阶版。同时也是海量数据处理课里讲过的一道基础题,后序还有各种进阶的在线解法。自己有思路但因为语法不够熟练,参考了讨论区的解法写的程序:涉及到了很多C++基础知识,值得好好复习。C++ STL 优先队列的应用缺点:最后是倒序输出的。class Solution {public:...原创 2020-02-07 15:15:52 · 153 阅读 · 0 评论 -
LeetCode 144,94,145:二叉树三种深度优先遍历
递归:class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> res; if(!root) return res; preorder(root, res); return res;...原创 2020-02-07 11:31:52 · 154 阅读 · 0 评论 -
LeetCode 230:二叉搜索树中第K小的元素
最基础的解法:将整个二叉树中序遍历存入序列,取第k个(index = k-1)返回。如果是第k大就反向中序遍历。class Solution {public: int kthSmallest(TreeNode* root, int k) { if(!root) return 0; InorderTraversal(root); r...原创 2020-02-06 10:57:59 · 128 阅读 · 0 评论 -
LeetCode 250:同值子树的个数
深度优先搜索:直观上感觉是后序,但并不是严格的后序遍历Python实现:注意短路效应带来的bug,比较隐蔽class Solution: def countUnivalSubtrees(self, root: TreeNode) -> int: if root == None: return 0 self.count...原创 2020-02-03 11:26:24 · 284 阅读 · 0 评论 -
LeetCode 239:滑动窗口最大值
方法一:暴力法 ,时间复杂度O((n-k) * k)class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { if(nums.empty() || k<=1) return nums; vector<...原创 2020-02-03 00:20:35 · 108 阅读 · 0 评论 -
LeetCode 739:每日温度
解题思路有两点比较关键:1、想到用栈,而且栈中存放的是索引,而不是温度值2、打破思维桎梏,不是按顺序来计算D中每一个值的class Solution {public: vector<int> dailyTemperatures(vector<int>& T) { vector<int> D(T.size(), 0...原创 2020-02-02 22:37:11 · 119 阅读 · 0 评论 -
LeetCode 234/9/125:回文链表,回文数,验证回文串
234:回文链表将链表存入数组再判断:Python有语法糖,不需要双指针法,直接就可以翻转比较。class Solution: def isPalindrome(self, head: ListNode) -> bool: array = [] currNode = head while currNode is not...原创 2020-02-02 14:58:39 · 111 阅读 · 0 评论 -
LeetCode 92:翻转链表 2
这道题乍一想觉得很简单,写完程序觉得自己的方法细节处理太繁琐了,改了两个比较隐蔽的Bug。对LeetCode测试样例可以通过,但是[3, 5],1,2这样的case就过不了,仔细推了一下,可能是prev没有在rear前面一个节点,而是和它同一个节点导致的。class Solution {public: ListNode* reverseBetween(ListNode* head...原创 2020-01-31 18:54:41 · 90 阅读 · 0 评论 -
LeetCode 206/24/25:一系列链表翻转问题
206. 翻转链表:加头结点,没有必要:class Solution {public: ListNode* reverseList(ListNode* head) { if(!head) return nullptr; ListNode dummy(0); dummy.next = head; ListNod...原创 2020-01-30 23:13:25 · 82 阅读 · 0 评论 -
LeetCode 242:有效的字母异位词
假期动手写的第一题!解法:采用数字数组计数对消的方法。在题解区叫这种方法为Hash表法,其实仔细想想确实是用一个数组实现的哈希表。class Solution {public: bool isAnagram(string s, string t) { if(s.length()!=t.length()) return false; vecto...原创 2020-01-30 15:14:44 · 73 阅读 · 0 评论