码迷,mamicode.com
首页 > 其他好文 > 详细

查找序列中第二大的元素

时间:2015-05-14 22:05:49      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:java

这个问题,感觉很简单,一看就可能首先想到几种方法,例如: 首先对这个序列进行排序,然后取第二个位置的元素;或者循环遍历元素序列,找到最大的元素,然后将其移除。再重复此过程,得到第二大的元素。

但是都没有考虑其效率。下面提出一种方法:

<span style="font-size:14px;">package algrithm;

public class secondbignum {

	public static void main(String[] args)
	{
		int []input={1,5,6,2,3,8,7,18};
		int start=0;
		int end=input.length-1;
		int r=findSecondNum(input,start,end);
		System.out.println("the second num is:"+r);
	}
	
	public static int findSecondNum(int num[],int start,int end)
	{
		if(end-start>0)//注意这个条件,不然会死循环
		{
			int mid = (start + end) / 2;
			int before = findMaxNum(num, start, mid);
			int latter = findMaxNum(num, mid + 1, end);
			if (before > latter) {
				int temp = findSecondNum(num, start, mid);
				if (temp > latter)
					return temp;
				else
					return latter;
			} else {
				int temp = findSecondNum(num, mid + 1, end);
				if (temp > before)
					return temp;
				else
					return before;
			}
		}
		return 0;
	}
	
	public static int findMaxNum(int num[],int start,int end)
	{
		int max=0;
		for(int i=start;i<=end;i++)
		{
			if(num[i]>max)
			{
				max=num[i];
			}
		}
		return max;
	}

}
</span>
思路:把n个数分成两部分,每部分都包含有n/2个数,假设为a[n/2]和b[n/2],每部分分别求最大数,假设为a[i]和b[j],如果a[i]比b[j]大,则在a[n/2]数组里找第二大数,假设为a[k],再比较a[k]和b[j],较大数就是所求的第二大数。

查找序列中第二大的元素

标签:java

原文地址:http://blog.csdn.net/ccq1029/article/details/45726007

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!