题目描述: 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 思路分析:这道题第一次看到类似的题是在算法设计与分析这本书的第三章分治策略,当时书上给的方法是以中位数为基准进行第K小元素的查找,还记得若采取这样的方法,则算法的 ...
分类:
编程语言 时间:
2020-05-17 01:18:26
阅读次数:
105
分治 什么是分治? 顾名思义,分而治之(废话),他可以把一个复杂的问题简单化,从全部到局部,逐渐缩小问题规模,从而变得更高效。 怎么变得高效 下面举两个因为分治而变得高效的排序算法,相信大家也早有耳闻。 快速排序 思路:首先 随便 找一个轴值,把所有比轴值小的数排在左边,比轴值大的数排在右边然后再在 ...
分类:
其他好文 时间:
2020-05-16 12:39:39
阅读次数:
42
一个骨牌为3格。 当棋盘边长为2,总格数(2^2-1)/3,发现可以整除。 那么因为棋盘边长为2^k,总格数(2^4-1)/3,可以用n^2-1=(n+1)(n-1)拆开,利用上一步,发现可以整除。 可以证的无论棋盘的边长,都可以在有一个奇异点的情况下被整除。 那么我们的目标是把大的棋盘一步步拆成边 ...
分类:
其他好文 时间:
2020-05-15 20:37:43
阅读次数:
83
题意 :有一个长度为$n$元素均为$0$的序列,进行$n$次操作构造出一个新序列$a$:每次选择最长的连续为$0$的区间$[l,r]$,使得第$i$次操作时,$a[\frac{l+r}{2}]=i$(下取整),求$a$. 题解 :刚开始我打算用归并分治的思想来写,但是发现左区间递归不到,然后就gg了 ...
分类:
其他好文 时间:
2020-05-15 19:56:45
阅读次数:
61
看到题目,一个变种的八皇后,在矩阵中寻找路径。 关于回溯的思路在博客: Burst Balloons(leetcode戳气球,困难)从指数级时间复杂度到多项式级时间复杂度的超详细优化思路(回溯到分治到动态规划 ) 中有非常详细的描述。 本题优化时间复杂度的关键在于剪枝,当越界、字符不匹配、路径已走过 ...
分类:
编程语言 时间:
2020-05-14 01:29:55
阅读次数:
70
采用分治思想,分治其实也是一种递归,递归的三个条件:递推公式,终止条件,递归代码实现 package dsaa.归并排序; import java.util.Arrays; /* * 归并排序 * */ public class MergeSortSolution { public static i ...
分类:
编程语言 时间:
2020-05-13 23:29:28
阅读次数:
68
相关概念 快速排序法 Quicksort 也是一个分治思想的算法. 对一个子数组 A[p: r] 进行快速排序的三步分治过程: 1, 分解. 将数组 A[p : r] 被划分为两个子数组(可能为空) A[p : q-1] 和 A[q+1 : r] , 使得 A[p : q-1] 中的每一个元素都小于 ...
分类:
编程语言 时间:
2020-05-13 14:01:05
阅读次数:
62
解决实际问题 第一步: 理解 先讲出来, 画图 第二步:计划 计划很重要,最好写出来; 第三步:分解 分治算法(把复杂的大问题分解成很多小问题) 任务->子任务->结果归并 第四步: 卡壳 重复看问题,站到旁观者看问题,请教同事; 最后:练习 ...
分类:
其他好文 时间:
2020-05-12 13:47:54
阅读次数:
49
Description 给定二维平面上的 $n$ 个点,选出 3 个点构造一个三角形(可以退化,即面积为 0),使得三角形的周长最小。求这个最小值。 输出结果与标准答案的差值的绝对值不超过 $10^{ 9}$ 就算通过。 可以到 " 这里(Problem K) " 提交。 Hint $1\le n\ ...
分类:
其他好文 时间:
2020-05-11 23:24:34
阅读次数:
61
一、什么是归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二、图解先将无序数组分割,经过排序,将两个有序数组再拼接。三、原理归并排序的原理就是合并两个有序数组。合
分类:
编程语言 时间:
2020-05-11 23:19:11
阅读次数:
67