一组数据,单列排列,如何求出它的最小值和次最小值. 求最佳算法.

dxhdxh2k 2010-01-11 02:02:52
一组数据,单列排列,如何求出它的最小值和次最小值. 求最佳算法.
...全文
473 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnylyy 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 whut_lcy 的回复:]
啥叫不用这些东西啊?啥叫乱用数据结构啊,数据结构是计算机的根基好不~~
[/Quote]

确实,我们要做的是理解算法和数据结构,然后选择合适的java集合类,没必要完全自己去写。

单纯从算法上讲,还有更好的:用数据结构“堆”,构造一个最大堆,然后弹出两次堆顶就OK了,时间复杂度3*O(logN)
whut_lcy 2010-01-11
  • 打赏
  • 举报
回复
1L的方法,精髓实际是二分法,不是吗
whut_lcy 2010-01-11
  • 打赏
  • 举报
回复
啥叫不用这些东西啊?啥叫乱用数据结构啊,数据结构是计算机的根基好不~~
notlogin 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nihuajie05 的回复:]
引用 5 楼 notlogin 的回复:
为什么不排序?
1楼的算法比排序快?

当然1楼的快了。。一楼的只要1次遍历。
就算是冒泡也没1楼的快。冒泡要交换数组元素吧。

[/Quote]

我的意思是,在条件允许的情况下,直接sort数组,然后去第一个和最后一个不就行了?

LZ没说不让用JAVA自己的方法呀
andyan_2008 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sunnylyy 的回复:]
不要排序,循环一遍就行

用数组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不变
[/Quote]
同意
nihuajie05 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 whut_lcy 的回复:]
童鞋们,java集合框架都丢啦?浪费啊~~~~~~~~
1)如果LZ纯粹研究排序、查找算法的话那就先去研究一下快速排序法,二分法等等常规排序、查找算法
2)如果是为了解决实际问题,那么你还是去用java集合框架吧,何必再造一个轮子?何况你的轮子肯定不是最好的。最好的大师们已经给你做了
[/Quote]
==!
根本不用这些东西好么。。
请不要乱用数据结构
nihuajie05 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 notlogin 的回复:]
为什么不排序?
1楼的算法比排序快?
[/Quote]
当然1楼的快了。。一楼的只要1次遍历。
就算是冒泡也没1楼的快。冒泡要交换数组元素吧。
whut_lcy 2010-01-11
  • 打赏
  • 举报
回复
童鞋们,java集合框架都丢啦?浪费啊~~~~~~~~
1)如果LZ纯粹研究排序、查找算法的话那就先去研究一下快速排序法,二分法等等常规排序、查找算法
2)如果是为了解决实际问题,那么你还是去用java集合框架吧,何必再造一个轮子?何况你的轮子肯定不是最好的。最好的大师们已经给你做了
yishiwucheng 2010-01-11
  • 打赏
  • 举报
回复
先取数组的头两个数据,比出大小,然后用这两个中大的那个和下一个对比,如果下一个更小,更新,然后在对比更新后的两个数据,再用大的和下一个对比,依次下去
liwenso 2010-01-11
  • 打赏
  • 举报
回复
冒两次泡,将最后两位取出即可。
baby1986 2010-01-11
  • 打赏
  • 举报
回复
冒泡或选择排序执行两轮就能得到最小和次小的数据啊
notlogin 2010-01-11
  • 打赏
  • 举报
回复
为什么不排序?
1楼的算法比排序快?
hbgzg3006 2010-01-11
  • 打赏
  • 举报
回复
莫非数据是放在文件中?如果那样的话,读取出来以String 或者Integer放入TreeSet即可,取第一个为最小,取第二个为次最小。不知道更好的办法有没有。
psyuhen 2010-01-11
  • 打赏
  • 举报
回复
偶不知道你数组里面的数据是什么类型。

若是数字,LS的就可以啦。

若是String,那么自己看着办吧。
potahai 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sunnylyy 的回复:]
不要排序,循环一遍就行

用数组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不变
[/Quote]
正解
sunnylyy 2010-01-11
  • 打赏
  • 举报
回复
不要排序,循环一遍就行

用数组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不变

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧