该问题涉及以 2*min 大于 max 的方式从整数列表的任意一侧删除元素。
vector arr = {250, 10, 11, 12, 19, 200};
res = solve(arr);
登录后复制
我们可以使用暴力方法。我们可以尝试所有可能的满足并找到满足 2*min > max 条件的最长子数组。我们还可以使用动态规划方法来尝试所有可能的过度且不需要的子数组组合。
示例(使用矢量 ADT)
假设我们有一个数组,例如“[250, 10, 11, 12, 19, 200]”。为了获得最佳解决方案,我们需要删除元素 [250, 200] 以形成数组 [10, 11, 12, 19],其中 min 为 10,max 为 19。因此 2*10 > 19。我们从数组,因此输出打印为 2。
下面是一个 C++ 程序,它描述了如何从数组中删除最小数量的元素,使得最小值的两倍大于最大值 -
#include
#include
using namespace std;
int solve(vector arr) {
int startIndex = 0, endIndex = 0;
bool foundAnAnswer = false;
for (int start=0; start