我正在做一道练习题,给定一个由N个值组成的数组,需要找到两个数,它们的差(最大值-最小值)是最大的。我希望v大于c...情况是这样的...假设我想以价格C购买拍卖品,这样我就可以以价格V出售它们并获得最大利润,数组的每个单元格都是t日该拍卖品的价格,因此我想以尽可能低的价格购买,以便以最高的价格出售,所以在数组中,C必须出现在V之前。例如:
n = 8
arr = {6,7,3,8,9,2,1,4,20}
我希望得到c = 1
和v = 20
,因为20 - 1 = 19
(这意味着这两个数字的减法结果是最高的)。
另一个例子:
n = 6
arr = {8,12,45,40,18,29}
我想要得到c = 8
和v = 45
,因为它们的差值是所有其他差值中最大的。(需要澄清的是,c并不总是数组中最小的数)。这两个数字不需要相邻出现。如果我有n = 1, {1}
,那么c = 1
且v = 1
。
这个例子展示了c和v不一定是最小/最大值。
n = 6
arr = {19,27,5,6,7,8}
在这种情况下,
c = 19
,v = 27
。此外,我需要使用归并排序的代码来解决这个问题。有许多例子将其分为两种方法:mergesort处理递归,而merge则使用辅助数组进行位置交换。
我正在使用归并排序代码(在我看来,合并是不必要的,因为我不关心排序),到目前为止,我有以下代码,但显然是错误的,请问有人能告诉我哪里做错了吗?
public static void mergeSort(int start, int end) {
if(start < end) {
int half = (start + end) / 2;
mergeSort(start, half);
for(int i = start; start < half; start++, i++){
if((arr[i+1] - arr[i]) > temp){
temp = arr[i+1] - arr[i];
c = i;
v = i+1;
}
}
mergeSort(half+1, end);
for(int i = half+1; i < end; half++, i++){
if((arr[i+1] - arr[i]) > temp){
temp = arr[i+1] - arr[i];
c = i;
v = i+1;
}
}
}
}
非常感谢您能提供的任何帮助!