我有一个数组,我想找出将数组更改为升序或降序所需的最小值。
例如:
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;
}
}
这是我的面试问题,有人告诉我该程序在某些我无法发现的情况下失败。
答案 0 :(得分:0)
因此,我认为这是在询问您的排序,以及该排序完成数字排序目标(无论升序还是降序)需要进行多少次迭代。您被允许使用普通排序吗?如果是这样,我将选择选择排序或合并排序程序。我实际上是在一个个人项目上做到这一点的,还让它计算迭代次数以比较不同种类的速度。合并排序花了我一段时间,但选择排序非常简单。
每种类型都有最好和最坏的情况。
编辑
我也发现了这一点: Minimum no of changes required to make array strictly increasing