计算最大次大值的最优算法
2007-11-04 10:34
274 查看
/*
/**求最大,次大值,比较次数为:n + log n -2 ,n-1 为求最大值的代价,log n -1 为求次大值的代价。
*/
public class SubmaxAndMaxEfficient
{
static int Max, Submax;
int max(int a, int b) //取a, b 最大值
{
if (a > b)
return a;
else
return b;
}
void heapFindMax(int[] E, int n)
{
int last;
int[] array = new int[2 * n];
// 把原数组放到array[n...2*n-1]
for (int i = 2 * n - 1, j = n - 1; i >= n; i--) {
array[i] = E[j--];
}
//找最大值,放到array[1]
for (last = 2 * n - 2; last >= 2; last -= 2) {
array[last / 2] = max(array[last], array[last + 1]);
}
Max = array[1];
if (array[2] > array[3])
Submax = array[3];
else
Submax = array[2];
//沿着堆顶往下找次大值
for (int i = 2; i <= 2 * n - 1; i *= 2) {
if (array[i] < array[i + 1]) {
Submax = max(array[i], Submax);
i += 1;
} else
Submax = max(array[i + 1], Submax);
}
}
public static void main(String[] args)
{
SubmaxAndMaxEfficient Result = new SubmaxAndMaxEfficient();
int[] array = new int[] {
102, -3, -4, -2, -6, 0,-4, 100, 1, 2, 3, 4, 5, 6, 7, 8,101};
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
Result.heapFindMax(array, 17);
System.out.println("Max is: " + Max);
System.out.println("Submax is: " + Submax);
}
}
/**求最大,次大值,比较次数为:n + log n -2 ,n-1 为求最大值的代价,log n -1 为求次大值的代价。
*/
public class SubmaxAndMaxEfficient
{
static int Max, Submax;
int max(int a, int b) //取a, b 最大值
{
if (a > b)
return a;
else
return b;
}
void heapFindMax(int[] E, int n)
{
int last;
int[] array = new int[2 * n];
// 把原数组放到array[n...2*n-1]
for (int i = 2 * n - 1, j = n - 1; i >= n; i--) {
array[i] = E[j--];
}
//找最大值,放到array[1]
for (last = 2 * n - 2; last >= 2; last -= 2) {
array[last / 2] = max(array[last], array[last + 1]);
}
Max = array[1];
if (array[2] > array[3])
Submax = array[3];
else
Submax = array[2];
//沿着堆顶往下找次大值
for (int i = 2; i <= 2 * n - 1; i *= 2) {
if (array[i] < array[i + 1]) {
Submax = max(array[i], Submax);
i += 1;
} else
Submax = max(array[i + 1], Submax);
}
}
public static void main(String[] args)
{
SubmaxAndMaxEfficient Result = new SubmaxAndMaxEfficient();
int[] array = new int[] {
102, -3, -4, -2, -6, 0,-4, 100, 1, 2, 3, 4, 5, 6, 7, 8,101};
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
Result.heapFindMax(array, 17);
System.out.println("Max is: " + Max);
System.out.println("Submax is: " + Submax);
}
}
相关文章推荐
- 计算最大最小值的最优算法
- 对ORA-01795: 列表中的最大表达式数为 1000的处理(算法:计算数量及切割)
- 求最大子列合——最优算法(在线处理)
- 算法训练 最大值与最小值的计算
- 求数组中的最大子序列的值最优算法
- 我遇到的最优的最大公约数与最小公倍数的算法
- java实现最大子序列问题——————性能最优的算法
- 同时寻找最大数和最小数的最优算法
- 同时得到最大最小值的最优算法
- 文本比较算法Ⅵ——用线性空间计算最大公共子序列(翻译贴)
- 同时寻找最大数和最小数的最优算法以及寻找最大的两个数所需的最少比较次数
- 大学时候想的一个算法——计算数组中最大和序列
- 同时寻找最大数和最小数的最优算法
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 面试算法:用队列计算滑动窗口内的最大网络流量
- 设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。
- 算法训练 最大值与最小值的计算
- 计算最大公约数的算法
- Java实现的计算最大下标距离算法示例
- php计算两个整数的最大公约数常用算法小结