使阵列按升序或降序所需的最小更改

时间:2018-09-06 19:42:20

标签: java algorithm

我有一个数组,我想找出将数组更改为升序或降序所需的最小值。

例如:

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;
    }     
}

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

1 个答案:

答案 0 :(得分:0)

因此,我认为这是在询问您的排序,以及该排序完成数字排序目标(无论升序还是降序)需要进行多少次迭代。您被允许使用普通排序吗?如果是这样,我将选择选择排序或合并排序程序。我实际上是在一个个人项目上做到这一点的,还让它计算迭代次数以比较不同种类的速度。合并排序花了我一段时间,但选择排序非常简单。

每种类型都有最好和最坏的情况。

编辑

我也发现了这一点: Minimum no of changes required to make array strictly increasing