摘要: 原题链接:109. 天才ACM 解题思路 首先,对于一个集合S,显然应该取S中最大的M个数和最小的M个数,最大和最小构成一对,次大和次小构成一对···这样求出“校验值”最大。而为了让数列A分成的段数最少,每一段都应该在“校验值”不超过T的前提下,尽量包含更多的数。所以我们从头开始对A进行分段,让每一 阅读全文
posted @ 2021-01-14 19:21 hnkjdx_react 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 原题链接:108. 奇数码问题 解题思路 奇数码问题两个局面可以达成,当且仅当两个局面下网格中的数以此写成1行 n*n-1 个元素的序列后(不考虑空格),逆序对个数的奇偶性相同。例如题目描述中的第一个局面可以写成[5 2 8 1 3 4 6 7]。该结论的必要性很容易证明:空格左右移动时,写数交换了 阅读全文
posted @ 2021-01-14 19:01 hnkjdx_react 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 原题链接:107. 超快速排序 解题思路 只通过比较和交换相邻两个数值的排序方法,实际上就是冒泡排序。在排序过程中每找到一对大小颠倒的相邻数值,把他们交换,就会使整个序列的逆序对个数减少1,最终排好序后逆序对个数显然为0,所以对a进行冒泡排序的最少交换次数就是序列a种逆序对的个数。我们直接使用对并排 阅读全文
posted @ 2021-01-14 18:49 hnkjdx_react 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 原题链接:106. 动态中位数 解题思路 ####对顶堆 这是一个很有用的算法,具体思路大致是,开两个堆,一个是大根堆,一个是小根堆,然后小于中位数的都放在大根堆,大于中位数的都放在小根堆,如果说,一个堆的个数大于了当前序列的 1/2 ,那么就将多余的数移过去,直到两个堆数量相等。 样例代码 #in 阅读全文
posted @ 2021-01-14 18:36 hnkjdx_react 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 原题链接:105.七夕祭 解题思路 ####分治+贪心+前缀和+中位数+排序 这道题有一个非常重要的性质就是,只会改变相邻的两个数的位置,因此我们交换两个数,只会改变一行或一列的喜爱小摊,而不会同时改变行和列的喜爱小摊,既然这样的话,我们就可以将这道题目分为两个部分,一部分是求行的最少次数,一部分是 阅读全文
posted @ 2021-01-14 18:16 hnkjdx_react 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 原题链接:104.货仓选址 解题思路 把A[1]~A[N]排序,设货仓建在 X 坐标处,X 左侧的商店有 P 家,右侧的商店有 Q 家。若 P < Q ,则把货仓的选址向右移动 1 单位距离,距离之和就会减小 Q - P。同理,若 P > Q ,则货仓的位置想左移动会使距离之和变小。当 P = Q 阅读全文
posted @ 2021-01-14 17:47 hnkjdx_react 阅读(109) 评论(0) 推荐(0) 编辑