我有一个数组,我想找出我需要做的最小值的数目,以改变数组的增加或减少顺序。
例如:

a = [1,2,5,6,5,7]

In above array, a[4]=5 which is less than a[3]=6. So I can add 1 to 5 to make it 6 so array becomes a=[1,2,5,6,6,7]. It is ok if I have same values consecutively.

我已经写了下面的程序,但我不确定这是否适用于所有情况。
public int process(List<Integer> list) {

    int up = 0;
    int down = 0;
    for (int i = 0; i < list.size() - 1; i++) {
        int left = list.get(i);
        int right = list.get(i + 1);
        if (left > right) {
            up += left - right;
        } else {
            down += right - left;
        }
    }
    if(up < down) {
       return up;
    } else {
       return down;
    }
}

这是我的面试问题,有人告诉我,这个程序在某些情况下失败了,我无法发现。

最佳答案

所以我想这是在问你的排序,以及排序需要多少次迭代才能达到排序的目的,不管是升序还是降序你被允许使用普通的种类吗如果是这样的话,我要么进行选择排序,要么进行合并排序我实际上是在一个个人项目中这样做的,并且让它计算迭代次数来比较不同类型的速度合并排序花了我一段时间来重新生成,但是选择排序是非常简单的。
每种类型都有最好和最坏的情况。
编辑
我还发现:
Minimum no of changes required to make array strictly increasing

关于java - 使阵列按升序或降序所需的最小更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52211137/

10-11 10:41