随笔分类 -  LeetCode

摘要:1044. Longest Duplicate Substring 本题的high level的思想是二分搜索这样的substring最多能有多长。对于一个固定的len,如果能在S里找到两处相同的子串滑窗,那么我们就可以对len的搜索往上调整;反之,我们就必须将len的搜索往下调。 于是本题转化为, 阅读全文
posted @ 2020-07-26 23:24 betaa 阅读(259) 评论(0) 推荐(0)
摘要:根据BST的前序遍历重建BST 1. 平均O(NlogN) 最坏O(N^2) class Solution { public: TreeNode* dfs(int l, int r, vector<int>& p) { if (l > r) return nullptr; TreeNode* nod 阅读全文
posted @ 2020-07-23 12:23 betaa 阅读(116) 评论(0) 推荐(0)
摘要:#include <iostream> #include <cmath> #include <cstdlib> #include <cstring> #include <climits> #include <algorithm> #include <numeric> #include <utilit 阅读全文
posted @ 2020-07-22 13:20 betaa 阅读(145) 评论(0) 推荐(0)
摘要:// c[u] == 0 表示从来没有访问过 (从来没有调用过dfs(u)) // c[u] == 1 表示已经访问过,并且还递归访问过它的所有子孙 (即dfs(u)曾经被调用过,并已经返回) // c[u] == -1 表示正在访问 (即递归调用dfs(u)正在栈中,尚未返回) int c[max 阅读全文
posted @ 2020-07-21 11:21 betaa 阅读(236) 评论(0) 推荐(0)
摘要:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。 无空格字符构成一个单词。 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 如 阅读全文
posted @ 2020-04-10 08:21 betaa 阅读(138) 评论(0) 推荐(0)
摘要:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 分析:滑动窗口法,用一个map记录每个字符出现的位置索引,当该字符之前出现过且在当前窗口内,则窗口左端点要右移到该位置。 class Solution { public: int lengthOfLongestSubst 阅读全文
posted @ 2020-04-09 18:00 betaa 阅读(143) 评论(0) 推荐(0)
摘要:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 分析:归并排序,在归并的时候多加一行代码统计逆序对即可 class Solution { public: vector<int> a, t; int cnt = 0; voi 阅读全文
posted @ 2020-04-09 17:53 betaa 阅读(144) 评论(0) 推荐(0)
摘要:0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。 分析:约瑟夫环问题,可以用循环链 阅读全文
posted @ 2020-04-09 17:38 betaa 阅读(253) 评论(0) 推荐(0)
摘要:写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 题解:使用位运算 计算不进位的和 sum = a ^ b; 计算进位carry = a & b << 1; 重复上两步a = sum; b = carry; class Solution { publ 阅读全文
posted @ 2020-04-09 17:29 betaa 阅读(140) 评论(0) 推荐(0)
摘要:1. 二叉搜索树的最近公共祖先 判断当前节点的值和两节点的值的大小即可确定$LCA(p, q)$的位置: 如果p q的值都小于当前节点的值,则递归进入当前节点的左子树;如果p q的值都大于当前节点的值,则递归进入当前节点的右子树;如果当前节点的值在p q两个节点的值的中间,那么这两个节点的最近公共祖 阅读全文
posted @ 2020-04-09 17:06 betaa 阅读(119) 评论(0) 推荐(0)
摘要:注意各种特殊情况 class Solution { public: int strToInt(string s) { int res = 0; int i = 0; int flag = 1; // 检查空格 while (s[i] == ' ') i++; // 检查符号 if (s[i] == 阅读全文
posted @ 2020-04-09 16:58 betaa 阅读(169) 评论(1) 推荐(0)
摘要:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 方法1:后序遍历二叉树,先判断子树是不是平衡树,如果不是,直接返回,此处利用了剪枝的思想 time: $O(n)$ space: $O(n)$ /** * Definit 阅读全文
posted @ 2020-04-08 16:21 betaa 阅读(124) 评论(0) 推荐(0)
摘要:输入两个链表,找出它们的第一个公共节点。 如果两个链表没有交点,返回 NULL 。 我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node 阅读全文
posted @ 2020-04-08 15:15 betaa 阅读(162) 评论(0) 推荐(0)
摘要:Given an integer array A, you partition the array into (contiguous) subarrays of length at most K. After partitioning, each subarray has their values 阅读全文
posted @ 2020-04-08 09:49 betaa 阅读(117) 评论(0) 推荐(0)
摘要:找出数组中最小的k个数。 排序 ,$nlog(n)$ 维持大小为k的最大堆,$nlog(k)$ 快排思想,期望时间复杂度 $O(n)$,最坏时间复杂度 $O(n^2)$,随机partition会改善最坏的情况 class Solution { public: int partition(vector 阅读全文
posted @ 2020-04-07 18:35 betaa 阅读(136) 评论(0) 推荐(0)
摘要:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 分析: class Solution { public: int majorityElement(vector<int>& nums) { int x = 0, votes = 阅读全文
posted @ 2020-04-07 17:36 betaa 阅读(111) 评论(0) 推荐(0)
摘要:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中的第一个节点的指针。 注意点: 中序遍历BST即为 阅读全文
posted @ 2020-04-07 16:24 betaa 阅读(196) 评论(0) 推荐(0)
摘要:把一个数组分成m个连续子数组(不能有空数组),求所有分法中,子数组sum的最大值的最小值。 方法1:容易想到的是动态规划 dp[i][j] = min(max(dp[k-1][j-1], sum[k][i]) 1 <= k <= i, dp[i][j]表示用前i个数字,分成j组,最大和的最小值 ti 阅读全文
posted @ 2020-03-20 10:19 betaa 阅读(137) 评论(0) 推荐(0)
摘要:分析:求一个区间最邻近的右边的区间在数组中的索引位置,右侧区间头要大于等于左侧区间尾。用map存区间头对应的区间索引。 标准库有map自己的lower_bound函数,返回大于等于key的第一个值的iteraotr。找右侧最邻近区间就是找 lower_bound(intervals[i][1]) . 阅读全文
posted @ 2020-03-20 10:09 betaa 阅读(99) 评论(0) 推荐(0)
摘要:分析:暴力枚举复杂度为$O(n^4)$,不可行。将A,B能组成的和用map计数,查找 -C[i]-D[j] 在map中是否存在 time $O(n^2)$ space $O(n^2)$ class Solution { public: int fourSumCount(vector<int>& A, 阅读全文
posted @ 2020-03-20 09:59 betaa 阅读(85) 评论(0) 推荐(0)