不要排序,循环一遍就行用数组A存储n个数据, max1存储最大值, max2存储次大值
初始: max1=A[0],max2=A[1];如果A[1]>A[0],max1=A[1],max2=A[0]
循环A[i]从A[2]到A[n-1]:
1:如果A[i]>max1,则max2=max1,max1=A[i]
2:如果A[i]<=max1&&A[i]>max2,则max2=A[i],max1不变
3:如果A[i]<max2,则max1,max2不变
初始: max1=A[0],max2=A[1];如果A[1]>A[0],max1=A[1],max2=A[0]
循环A[i]从A[2]到A[n-1]:
1:如果A[i]>max1,则max2=max1,max1=A[i]
2:如果A[i]<=max1&&A[i]>max2,则max2=A[i],max1不变
3:如果A[i]<max2,则max1,max2不变
1)如果LZ纯粹研究排序、查找算法的话那就先去研究一下快速排序法,二分法等等常规排序、查找算法
2)如果是为了解决实际问题,那么你还是去用java集合框架吧,何必再造一个轮子?何况你的轮子肯定不是最好的。最好的大师们已经给你做了
我的意思是,在条件允许的情况下,直接sort数组,然后去第一个和最后一个不就行了?LZ没说不让用JAVA自己的方法呀
确实,我们要做的是理解算法和数据结构,然后选择合适的java集合类,没必要完全自己去写。单纯从算法上讲,还有更好的:用数据结构“堆”,构造一个最大堆,然后弹出两次堆顶就OK了,时间复杂度3*O(logN)