使用特殊规则将数组划分为两个数组
Partitioning an array into two arrays using special rule
我一直在练习,却偶然发现了一个问题。
给定一个整数数组,确定它是否可以划分为两个数组,每个数组的顺序都是递增的。例如,3,1,5,2,4可以,但4,8,1,5,3不能。
问题就在这里。我不明白为什么第一个数组可以,而第二个数组不能
给出了一个提示:
如果我们成功地对数组的初始段进行了分区,那么其中一个部分必须包含迄今为止看到的最大元素。显然,另一部分的最大元素尽可能小符合我们的最大利益。因此,给定下一个元素,如果它是到目前为止的最大值,则将其添加到"最大包含部分"中。如果没有,如果可能的话,别无选择,只能将其添加到另一个部分(例如:如果它大于该部分的最大元素,但不是当前最大元素)。如果这个过程失败,那么没有分区是可能的,如果它成功了,那么我们已经演示了一个分区。
最重要的部分是理解这种分区的逻辑
提前谢谢。
让我们在{3,1,5,2,4}上使用给定的算法。
第一个数字是3。我们的分区是{3},{}。
接下来是1。我们无法将其添加到{3}中,因此我们将其添加至另一个:{3},{1}。
接下来是5。我们将把它添加到{3}中,以便将{1}保存为较小的数字:{3,5},{1}。
接下来是2。我们必须将其添加到{1}:{3,5},{1,2}。(现在我们看到了为什么不在{1}中添加5是好的。)
接下来是4:再次,我们别无选择:{3,5},{1,2,4}。
相关文章:
- 如何在C++中比较两个char数组
- 在c++中获取两个大int,并将它们存储在数组中
- 如何以优化的方式同时迭代两个间距不相等的数组
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 可以将两个相同类型的连续数组视为一个数组吗?
- C++递归来决定数组中的两个值
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- 在 char* 数组中添加两个索引
- 使用嵌套函数数组是个好主意吗?
- 链表数组(5 个队列)
- 是否有可能通过溢出 C 中的第一个元素来写入数组第二个元素
- 动态分配一维结构数组:两种方法
- 指向数组第一个元素的指针的地址
- 用 std::valarray 替换 POD C 样式数组是个坏主意吗?
- OpenGL:两个顶点数组 + 两个索引数组
- c++多维数组多个数据类型
- 使用C++AMP处理大型数组(65536+个元素)
- 在c++中使用MKL函数初始化数组是个好主意吗?