- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在做一个练习,给定一个包含 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
(这意味着这 2 个数字的减法是最高)
另一个例子:
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;
}
}
}
}
在此先感谢您提供的任何帮助!
最佳答案
我猜你的代码中的名称 mergeSort
是继承的....
因为你已经进行了递归,所以没有必要遍历所有的元素,因为递归之后,结果已经呈现出来了。例如,一种可能的方法是将最小值交换到第一个位置,将最大值交换到最后一个位置,然后,在递归的“上层”级别上,您可以直接检索它们。
这是另一个利用合并排序原理的解决方案,但仅返回最大值。
public class test {
static int arr [] = {6,7,3,8,9,2,1,4,20};
public static void main (String args[]) {
System.out.println(merge_select_max(0, arr.length - 1));
}
public static int merge_select_max (int start, int end) { // both inclusive
if (start == end) {
return arr[start];
}
else {
int half = (start + end) / 2;
int first = merge_select_max (start, half);
int second = merge_select_max (half + 1, end);
return (first > second ? first : second);
}
}
}
关于java - 归并排序应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354954/
本文实例汇总了Java各种排序算法。分享给大家供大家参考,具体如下: 1. 冒泡排序: ?
1.冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 算法步
前言 平时用惯了高级语言高级工具高级算法,难免对一些基础算法感到生疏。但最基础的排序算法中实则蕴含着相当丰富的优化思维,熟练运用可起到举一反三之功效。 选择排序 选择排序几乎是
我是一名优秀的程序员,十分优秀!