`
mmdev
  • 浏览: 12926970 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

求数对的最大值

 
阅读更多
package maxD_value;
/**
* 题目:在数组中,数字减去它右边的数字得到一个数对之差。
* 求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。
*
*/
public class Test {


//下面这个方法是从后往前遍历一遍,找出最小的值,然后用前面的值减去最小的值,并找出遍历中的最大数,则得到了结果。
public static int maxValue_MethodOne(int array[])
{
int max=0,D_value;
int n = array.length;
int min = array[n-1];
for(int i=n-2;i>=0;i--)
{
D_value = array[i] - min;

if(D_value > max ) // 如果当前的差值比以前的值都大,则更新结果。
max = D_value;
if(D_value<0)
min = array[i]; //如果一个D_value<0 则说明当前的array[i]比min还小,则更改min的值
}
return max;
}
//下面的这种方法和上面的思想是一样的
public static int maxValue_MethodTwo(int array[])
{
int D_value,result=0;
int n = array.length;
int max = array[0];
for(int i=1;i<n;i++)
{
D_value = max - array[i];
if(array[i]>max)
max = array[i];
if(D_value>result)
result = D_value;
}
return result;
}
//下面的方法就是将其转化为求数组的最大子段和问题
/**
* 思想为下面:
* 如果输入一个长度为n的数组numbers,我们先构建一个长度为n-1的辅助数组diff,
* 并且diff[i]等于numbers[i]-numbers[i+1](0<=i<n-1)。
* 如果我们从数组diff中的第i个数字一直累加到第j个数字(j > i),
* 也就是diff[i] + diff[i+1] + … + diff[j]
* = (numbers[i]-numbers[i+1]) + (numbers[i + 1]-numbers[i+2])
* + ... + (numbers[j] – numbers[j + 1]) = numbers[i] – numbers[j + 1]。
*
*分析到这里,我们发现原始数组中最大的数对之差(即numbers[i] – numbers[j + 1])其实是辅助数组diff中最大的连续子数组之和。
*
*
*/
public static int maxValue_MethodThree(int array[])
{

//新建一个数组,用于存放原来数组中相邻两个数据的差值
int n = array.length;
int tem[] = new int[n-1];
for(int i=1;i<n;i++)
{
tem[i-1] = array[i-1]-array[i];
}
// 下面就转化为求tem数组中连续字段和最大的问题了,
int max = 0;
int sum=0;
for(int i=0;i<tem.length;i++)
{
sum += tem[i];
if(sum>max)
max = sum;
if(sum<0)
{
sum =0;
}
}
return max;
}
public static void main(String[] args) {
int arr[] = new int[]{2, 4, 1, 16, 7, 5, 11, 9};
System.out.println("求解数组中的差值最大问题\n");

int max = maxValue_MethodOne(arr);
System.out.println("使用第一种方法求解的结果为 :"+max);
max = maxValue_MethodTwo(arr);
System.out.println("使用 第二种方法求解的结果为:"+max);
max = maxValue_MethodThree(arr);
System.out.println("使用第三种方法求解的结果为:"+max);
}

}


运行的结果为:

求解数组中的差值最大问题


使用第一种方法求解的结果为 :11
使用 第二种方法求解的结果为:11
使用第三种方法求解的结果为:11

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics