分治算法
文章平均质量分 86
ngioig
在校生大学生,正在努力酷酷学习,体转码,假体育生也能写好代码!!!
展开
-
【分治算法 7】翻转对(hard)(每日一题)
这里是 归并排序对分治算法的应用,这是最后一题了。这就是分治算法的一系列咯。还有点小难,但是相信我,这些题给他刷刷就会咯。⼤思路与求逆序对的思路⼀样,就是利⽤归并排序的思想,将求整个数组的翻转对的数量,转换成 三部分:左半区间翻转对的数量,右半区间翻转对的数量,⼀左⼀右选择时翻转对的数量。重点就 是在合并区间过程中,如何计算出翻转对的数量。 与上个问题不同的是,上⼀道题我们可以⼀边合并⼀遍计算,但是这道题要求的是左边元素⼤于右 边元素的两倍,如果我们直接合并的话,是⽆法快速计算出翻转对的数量的。原创 2024-05-31 21:10:21 · 948 阅读 · 0 评论 -
【分治算法 7】计算右侧⼩于当前元素的个数(hard)(每日一题)
分治算法(Divide and Conquer),顾名思义,将一个大问题分成多个小问题,然后分别解决这些小问题,最后将它们的解合并起来得到整体的解。这个算法的核心思想是将问题分割成更小的、相同结构的子问题,然后将子问题的解合并成原问题的解。分治算法的运行流程通常包括三个步骤:分解、解决和合并。原创 2024-05-24 22:10:06 · 856 阅读 · 0 评论 -
【分治算法 6】数组中的逆序对(hard)(每日一题)
分治算法(Divide and Conquer),顾名思义,将一个大问题分成多个小问题,然后分别解决这些小问题,最后将它们的解合并起来得到整体的解。这个算法的核心思想是将问题分割成更小的、相同结构的子问题,然后将子问题的解合并成原问题的解。分治算法的运行流程通常包括三个步骤:分解、解决和合并。⽤归并排序求逆序数是很经典的⽅法,主要就是在归并排序的合并过程中统计出逆序对的数量,也就是在合并两个有序序列的过程中,能够快速求出逆序对的数量。 我们将这个问题分解成⼏个⼩问题,逐⼀破解这道题。原创 2024-05-23 09:30:00 · 563 阅读 · 0 评论 -
【分治算法 5】归并排序(medium)(每日一题)
归并排序的流程充分的体现了「分⽽治之」的思想,⼤体过程分为两步:◦ 分:将数组⼀分为⼆为两部分,⼀直分解到数组的⻓度为 1 ,使整个数组的排序过程被分 为「左半部分排序」+「右半部分排序」;◦ 治:将两个较短的「有序数组合并成⼀个⻓的有序数组」,⼀直合并到最初的⻓度。思想是将问题分割成更小的、相同结构的子问题,然后将子问题的解合并成原问题的解。分治算法的运行流程通常包括三个步骤:分解、解决和合并。原创 2024-05-22 21:55:55 · 322 阅读 · 0 评论 -
【分治算法 4】最小的 k 个数(medium)(每日一题)
最⼩的k个数(medium)(每日一题)在快排中,当我们把数组「分成三块」之后: [l, left] [left + 1, right - 1] [right, r] ,我们可以通过计算每⼀个区间内元素的「个数」,进⽽推断出最⼩的k个数在哪 些区间⾥⾯。 那么我们可以直接去「相应的区间」继续划分数组即可。这道题其实有很多做法,1. 直接排序 O(n * logN)2.堆实现 O(n * logK)3.分治 O(N) 这里只实现第三种做法,如果另外两种有原创 2024-05-21 20:18:20 · 288 阅读 · 0 评论 -
【分治算法 3】快速选择算法(medium)(每日一题)
快速选择算法215. 数组中的第K个最大元素 - 力扣(LeetCode)这道题有多种解法,比较经典的方式是用建小根堆去找这个数O(n*logk)这里使用分治的思想解决这道问题能达到 O(n) 《算法导论》在快排中,当我们把数组「分成三块」之后: [l, left] [left + 1, right - 1] [right, r] ,我们可以通过计算每⼀个区间内元素的「个数」,进⽽推断出我们要找的元素是 在「哪⼀个区间」⾥⾯。 那么我们可以直接去「相应的区间」去寻找最终结果就好了。原创 2024-05-20 09:43:53 · 888 阅读 · 0 评论 -
【分治算法 2】快速排序(medium)(每日一题)
以上是今天总结的第二道分治的题,后续会更新一系列的分治算法相关的题哦。原创 2024-05-18 23:46:44 · 684 阅读 · 0 评论 -
【分治算法 1】颜⾊分类(medium)(每日一题)
分治算法(Divide and Conquer),顾名思义,将一个大问题分成多个小问题,然后分别解决这些小问题,最后将它们的解合并起来得到整体的解。这个算法的核心思想是将问题分割成更小的、相同结构的子问题,然后将子问题的解合并成原问题的解。分解、解决和合并。分解:将原问题分解成若干个规模较小的子问题。这个步骤通常通过递归实现,直到子问题足够简单可以直接求解。解决:递归地求解子问题。这可以通过相同的方法再次应用分治算法,继续将子问题分解成更小的子问题,直到达到基本情况可以直接求解。原创 2024-05-17 23:38:05 · 580 阅读 · 0 评论