首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到最小编号。通过选择任何间隔并在每一步将“1”添加到间隔中的所有项来使数组不递减的步骤?

如何找到最小编号。通过选择任何间隔并在每一步将“1”添加到间隔中的所有项来使数组不递减的步骤?
EN

Stack Overflow用户
提问于 2014-03-26 05:16:52
回答 1查看 1K关注 0票数 0

给定一个数组,我们需要找到使其不递减的最小步数。我们可以选择i&j,并在每一步将区间ai中的所有元素加上'1‘到一个j

代码语言:javascript
复制
for eg: A={3,2,1}
        answer is 2.
        step1 : {3,3,2} i=1,j=2
        step2 : {3,3,3} i=2,j=2

我想这个问题可以用DP解决,但不能想到it......plz帮助

EN

回答 1

Stack Overflow用户

发布于 2014-09-14 18:28:30

这个问题可以通过一个技巧来解决,这个技巧在观察时被证明是有用的。我所做的是找到主数组的所有严格递减的子数组,然后减去它们的第一个和最后一个元素(最高-最低),然后进行相加。结果是所需的最小步骤。

代码语言:javascript
复制
int min_step(int arr[],int n)
{
    int step=0,max=arr[0];
    for(int i=1;i<n;i++)
    {
        if(i==x || arr[i]>=arr[i-1]);
        {
            step+=(max-arr[i-1]);
            max=arr[i];
        }
    }
    return step;
}

例如。如果我将数组设为:

代码语言:javascript
复制
arr[4]={11,8,4,54}

答案是7.(怎么做?)

代码语言:javascript
复制
11 8 4 54
Choosing {8,4} and increasing 3 times
11 11 7 54
Choosing {7} and increasing 4 times
11 11 11 54
Which is the required array

该算法使用唯一递减的子数组(11,8,4)和11-4=7来计算相同的答案

这是因为如果我们找到了递减的子数组,那么最小的元素旁边的元素首先被平整,然后递增的范围随后增加。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22646430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档