
LC分治
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
LeetCode 395. 至少有K个重复字符的最长子串( 前缀和+分治 、枚举+滑动窗口)
至少有K个重复字符的最长子串class Solution {public: vector<int> pre[26]; int len, k; string s; int longestSubstring(string s, int k) { len = s.size(); this->k = k; this->s = s; for(int i=0;i<26;i++) pre[i原创 2021-02-27 03:08:44 · 195 阅读 · 0 评论 -
LeetCode 148. 排序链表 (归并排序、自顶而下、自底而上)
归并排序,时间复杂度:O(n∗logn)O(n*logn)O(n∗logn)自顶而下,空间复杂度:O(log)O(log)O(log)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(原创 2021-01-17 22:55:43 · 98 阅读 · 0 评论 -
LeetCode 327. 区间和的个数 (分治算法+归并排序)
区间和的个数前缀和前缀和很容易想到,暴力法+前缀和的时间复杂度就是O(n2)O(n^2)O(n2)分治如果用区间分治的思想考虑这样的问题,很容易缩小问题规模(区间大小)。将区间分成左右两半,序号对 从左边产生,从右边产生,以及一个端点在左边一个端点在右边。前两者递归解决即可。关键是最后一个。排序、单调性如果是两个升序的数组,考虑类似的问题,即s2[j]−s1[i]s2[j]-s1[i]s2[j]−s1[i]处在某个数值区间的数目,其实就能发现一个单调性 —— 固定一个指针,另一个原创 2020-11-07 01:54:08 · 302 阅读 · 0 评论 -
LeetCode 23. 合并K个升序链表 (链表、堆、分治)
23. 合并K个升序链表堆k路归并问题时间复杂度:O(kn∗log(k))O(kn*log(k))O(kn∗log(k))/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {private:原创 2020-09-17 22:47:52 · 124 阅读 · 0 评论 -
LeetCode 932. 漂亮数组 (分治思想)
漂亮数组以n=8解释我的算法流程: 1 2 3 4 5 6 7 8之后分成两类 1 3 5 7 2 4 6 8按照同样的方法这两个子序列再排列,即 1 5 3 7 2 4 6 8最后向上合并答案. 时间复杂度相当于遍历二叉树,为O(n)O(n)O(n)class Solution {public: vector<int> beautifulArray(int n) { vector<int> a; for(int i=1;i<原创 2020-07-16 17:32:09 · 318 阅读 · 0 评论 -
LeetCode 53. 最大子序和 (贪心、DP、分治)
贪心class Solution {public: int maxSubArray(vector<int>& nums) { long long ans = -3e9,cnt = 0, his=0, n = nums.size(); for(int i=0;i<n;i++){ if(his<0){ // 如果 以上一个数结尾的子数组的和 小于0,那就不要前面这段 .原创 2020-07-16 06:26:38 · 176 阅读 · 1 评论