Java
Java天下第一
一路是夜幕沉沙
终究会坠落
展开
-
Java 求最大子数组
Background 在某天购入股票后抛出,求如何取得最大利润。已知股票趋势如图所示。 Thought 我们都知道——利润 = 售价 - 成本,即两者之差越大则利润越大。要求利润的最大值,不妨先计算出当天与前一天股价的差,得到的股价浮动数组,然后找其最大子数组,即为原问题的解。 对于最大子数组,最简单粗暴的方法就是两层 for,遍历所有子数组后,自然能求出最大子数组。 更好的解决办法是用分...原创 2020-02-02 11:04:23 · 1293 阅读 · 0 评论 -
Java 分治策略实现归并排序
Thought 能不能使用分治策略的关键是 子问题的最优解是否可以通过某种手段得到原问题的最优解。对于归并排序,将两个已经有序的子问题序列进行合并,就可得到一个有序序列,以此类推,最终可将所有子问题序列合并成一个有序序列,而得到的有序序列就是最终答案。 图片来自简书,链接:https://www.cnblogs.com/chengxiao/p/6194356.html 至于如何合...原创 2020-02-02 11:03:10 · 807 阅读 · 0 评论 -
Java 分治策略实现快速排序
Thought Divide: Partition the array into two subarrays around a pivot x such that elements in lower subarray ≤ x ≤ elements in upper subarray. Conquer: Recursively sort the subarrays. Combine: Trivia...原创 2020-02-02 11:01:57 · 921 阅读 · 0 评论 -
Java 建立大顶堆
Thought 从最后一个有孩子的父节点开始调整,若父节点的值小于左右孩子结点的值(如果有的话),就与该孩子结点交换位置。若发生了交换,由于原来父节点到了他的孩子结点上,可能破坏了现在这颗以原来父节点为根节点的子树,所以需要重复以上步骤,即递归。 数组的范围是从 0 ~ length - 1,设父节点的下标为 p,则: p的左孩子下标为:2 * p + 1 p的右孩子下标为:2 *p + 2...原创 2020-02-02 11:00:11 · 1226 阅读 · 0 评论