上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 20 下一页
摘要: 这题是拓扑排序的模板题。 先看一下拓扑排序的步骤: (1)遍历存放所有点之间的依赖关系的数组(这题是prerequisities数组),统计所有入度为0的节点,即没有任何先修课程的课程。 (2)有一个队列存放所有的点(入队顺序表示学习课程的顺序),将所有入度为0的节点入队。 然后进行BFS,不断取出 阅读全文
posted @ 2020-08-13 14:17 machine_gun_lin 阅读(128) 评论(0) 推荐(0)
摘要: 和整数二分不同,浮点数不存在由于(整数)取整导致的边界问题,每次二分区间严格减半, 因此比整数二分简单的多,每次更新边界时直接让r = mid或l = mid即可。 看一道题,acwing790.数的三次方根 浮点数二分除了更新区间和浮点数不同,还有就是二分终止条件,一般有两种写法,一种就是当前区间 阅读全文
posted @ 2020-08-11 16:55 machine_gun_lin 阅读(438) 评论(0) 推荐(0)
摘要: 整数二分有两个模板。 int bsearch_1(int l, int r) { while(l < r) { int mid = l + 1 >> 1; if(check(mid)) r = mid; else l = mid + 1; } return l; } 这种写法每次把区间压缩到**[l 阅读全文
posted @ 2020-08-11 16:45 machine_gun_lin 阅读(180) 评论(0) 推荐(0)
摘要: 原题链接:acwing787.归并排序 归并排序和快速排序类似,都是基于分治的,步骤如下: (1)确定待排序数组的分界点mid, 一般取mid为待排序数组的中位数 mid = l + r >> 1; (2)递归排序分界点的左右两侧区间,直到区间大小为1; (3)归并两个排好序的区间,把两个有序的数组 阅读全文
posted @ 2020-08-11 14:28 machine_gun_lin 阅读(100) 评论(0) 推荐(0)
摘要: 原题链接:acwing786.第k个数 一道快速排序的模板题,关于快速排序的原理和模板,可以参考[模板]快速排序 这里直接贴代码吧,和模板没什么区别,就输出排序后的第k个数而已。 #include<iostream> using namespace std; const int N = 1e6 + 阅读全文
posted @ 2020-08-11 11:35 machine_gun_lin 阅读(407) 评论(0) 推荐(0)
摘要: 原题链接:acwing785.快速排序 给定数组大小n和数组q[n],对数组进行排序。 快速排序的原理:基于分治 (1)确定分界点x:可以取x为q[l], q[l + r >> 1],q[r], 或者数组中间随机一个值(建议取q[l + r >> 1], 原因在后面说)。这里l和r是当前待排序数组的 阅读全文
posted @ 2020-08-11 11:20 machine_gun_lin 阅读(165) 评论(0) 推荐(0)
摘要: 状态机dp,可以参考LeetCode188. 买卖股票的最佳时机 IV。 我们有两个状态,当前交易的天数i和当前是否持有股票,我们用一个二维数组dp[n][2]表示各个状态所能获得的最大收益(其中n为prices数组的大小,表示交易的天数)。 比如dp[i][0]表示第i天(i从0开始),当前不持有 阅读全文
posted @ 2020-08-08 22:04 machine_gun_lin 阅读(132) 评论(0) 推荐(0)
摘要: 状态机dp,可以参考LeetCode188. 买卖股票的最佳时机 IV. 我们可以用一个数组dp[n][2]表示每一个状态下的最高收益(其中n是prices数组的大小,即总的天数)。 数组的第一维表示天数,第二维表示持有或不持有股票(1表示持有,0表示不持有)能获得的最大收益。 比如dp[i][0] 阅读全文
posted @ 2020-08-08 17:24 machine_gun_lin 阅读(68) 评论(0) 推荐(0)
摘要: 由于只能进行两次交易,且交易之间不能有交集,所以可以视为两段独立的交易时间,因此我们可以枚举所有的两次交易的“分界点”,比如我们以第二次交易的开始时间作为分界点,枚举从开头到当前这个点的所有时间内,如果只进行一次交易所能获得的最大收益(这就是第一笔交易所能获得的最大收益)。然后再从后往前枚举,更新从 阅读全文
posted @ 2020-08-08 16:49 machine_gun_lin 阅读(170) 评论(0) 推荐(0)
摘要: 题目说了可以无限次交易。又因为,对于一次从第i天买入,第j天卖出的交易方案,获得的利润等于prices[j] - prices[i],即只和这次交易的买入和卖出当天的价格有关。 所以对于一个跨越连续多天的交易可以分割为连续多个的跨越一天的交易。 所以我们只需要选择那些能够获利的“两天”进行交易(前一 阅读全文
posted @ 2020-08-08 15:23 machine_gun_lin 阅读(82) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 20 下一页