摘要: 原题链接:117. 占卜DIY 解题思路 ####搜索+模拟 感觉这道题目,就是一道纯模拟的题目,没有什么难点,大致有几个易错点,这里提醒一下。 每次拿该堆的末尾,这一点容易犯错,因为不是拿之前的第四张牌,而是当前的末尾的牌 读入问题,这里读入需要特判几个点,也就是A,10,J,Q,K 注意储存问题 阅读全文
posted @ 2021-01-25 18:47 hnkjdx_react 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 原题链接:116. 飞行员兄弟 解题思路 ####算法标签:位运算+二进制枚举 这道题目解题思路大致是,首先我们可以构造一个16位二进制数,然后,二进制数的每一位代表4x4矩阵中的一位,例如1代表(1,1),2代表(1,2),3代表(1,3),4代表(1,4),5代表(2,1)。既然这样的话,那么我 阅读全文
posted @ 2021-01-25 18:22 hnkjdx_react 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 原题链接:115.给树染色 解题思路 ###贪心+树上操作+并查集思想+模拟性质 首先这道题有一个错误的思想,那就是看当前节点的子节点,选择最大的那个节点,这个明显是错误的,如下图所示。 如果按照上面的错误贪心实现肯定是错误的。 下面是正确的贪心思路 我们知道,我们肯定是要权值val最大的点x,越先 阅读全文
posted @ 2021-01-16 12:50 hnkjdx_react 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 原题链接:112. 雷达设备 解题思路 ###贪心 O(nlogn) 如下图所示,对于任意一个小岛 (x,y),我们都可以在海岸线上求出能覆盖该小岛的建造雷达的区间 [a,b]。 由勾股定理可知 a = \sqrt{d2-y2} b = \sqrt{d2-y2} 将所有小岛转化成区间后,问题转化为: 阅读全文
posted @ 2021-01-16 12:36 hnkjdx_react 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 原题链接:111. 畜栏预定 解题思路 按照开始吃草的时间把牛排序。 维护一个数组S,记录当前每个畜栏安排进去的最后一头牛,最初没有畜栏。 依次对每头牛,扫描数组S,找到任意一个畜栏,满足当前的牛开始吃草的时间不早于畜栏中最后一头牛结束吃草的时间。如果这样的畜栏不存在,则为其新建一个畜栏。 这个贪心 阅读全文
posted @ 2021-01-16 12:10 hnkjdx_react 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 原题链接:110. 防晒 解题思路 ###贪心+排序 我们首先将奶牛可以承受的最小值,递减排序,也就是降序排列,然后将防晒霜固定的值,递减排序,还是降序排列. 对于每一个头奶牛而言,当然是要选择目前来说满足条件的最差的防晒霜,什么最差的定义,就是选择满足奶牛条件的SPF最大的那一瓶防晒霜. 注意:降 阅读全文
posted @ 2021-01-16 11:53 hnkjdx_react 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 原题链接: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 阅读(136) 评论(0) 推荐(0) 编辑