高分求算法:求助一个取得数组中的次大值的数据下标的JAVA的算法

wscft 2008-01-09 01:19:35
例如:

String s[] = {"150","45","250","232","244","189","200","219","228"};
正常情况下,取得数组的最大值的算法比较多,也是很好实现的,现在要求次大值在数组中的下标,譬如上面的数据
最大值(250)的下标为2,次大值(244)的下标为4,
这个如何取得次大值的大小及下标呢?
希望哪位达人给个算法参考参考谢谢!
...全文
590 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
haoyangguang 2008-01-10
  • 打赏
  • 举报
回复
String 类型的对象能否比较大小,我不知道。但我知道整数型能。
impor java.util.*;
public class test{
public static void main(String args[]){
int s[] = {150,45,250,232,244,189,200,219,228};
for(int i=0;i<s.length-1;i++){
for(int j=i+1;j<s.length;j++){
if(s[i]>s[j]){
int temp=s[i];
s[j]=temp;
s[i] =s[j];
}
}
}
int k=s[s.length()-1];
HashMap has=new HashMap();
has.put(150,"1");
has.put(45,"2");
has.put(250,"3");
has.put(232,"4");
has.put(244,"5");
has.put(189,"6");
has.put(200,"7");
has.put(219,"8");
has.put(228,"9");
System.out.println("次大值为:"+has.get(k));
}
}
hanfengthinker 2008-01-10
  • 打赏
  • 举报
回复
2楼的不错
先排序再输出也行
zdblzwj 2008-01-09
  • 打赏
  • 举报
回复
都不错,这几个算法都差不多,在两个之间进行比较的时候取出最大值的同时也可以取出最大值相对应的下标(length).循环一次结果就出来了
sd4530609 2008-01-09
  • 打赏
  • 举报
回复
不好意思,我说差点什么呢,没有下标


/*
* Created on 2008/01/09
*/

public class numTest {
public static void main(String[] args) {

int s[] = {150,45,250,232,244,189,200,219,228};
int max = 0;
int No2max = 0;
int maxIndex= 0;
int max2Index =0;
for (int i=0; i < s.length; i++) {
if(max > s[i])
{
}else{
max = s[i];
maxIndex = i+1;
}

}

System.out.println(max + "("+maxIndex +")");

for (int j = 0; j < s.length; j++) {
if(s[j] == max && j!=s.length-1)
{
j++;
}else if(s[j] == max && j == s.length-1)
{
break;
}
if(No2max > s[j])
{
}else
{
No2max = s[j];
max2Index = j+1;
}
}
System.out.println(No2max+"("+max2Index +")");
}

}

sd4530609 2008-01-09
  • 打赏
  • 举报
回复


/*
* Created on 2008/01/09
*/

public class numTest {
public static void main(String[] args) {

int s[] = {150,45,250,232,244,189,200,219,228};
int max = 0;
int No2max = 0;
for (int i = 0; i < s.length; i++) {
if(max > s[i])
{
}else{
max = s[i];
}

}
System.out.println(max);
for (int j = 0; j < s.length; j++) {
if(s[j] == max && j!=s.length-1)
{
j++;
}else if(s[j] == max && j == s.length-1)
{
break;
}
if(No2max > s[j])
{
}else
{
No2max = s[j];
}
}
System.out.println(No2max);
}

}

chengchaog 2008-01-09
  • 打赏
  • 举报
回复
来晚了,偶靠,
java2000_net 方法不错
imA 2008-01-09
  • 打赏
  • 举报
回复
package f.test;


class Sort {

/**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) {
// TODO: Add your code here
String s[] = {"150","45","250","232","244","189","200","219","228"};
int length=s.length;
Integer inter[] =new Integer[length];
/*
*首先将字符数组转换为整数型数组,编译在后面通过Arrays的sort方法进行排序
*同时将数组中的元素的位置存储在映射中,编译排序后根据元素值获得元素的位置
*/
java.util.Map position=new java.util.HashMap();
for(int i=0;i<length;i++){
position.put(s[i],new Integer(i));
inter[i]=new Integer(s[i]);
}
/*
*对数组按升序排序,关于sort的详细用法看API 文档
*/
java.util.Arrays.sort(inter);
System.out.println("次大值为 :"+inter[length-2]+",次大值下标为 :"+position.get(inter[length-2].toString()));
}
}
wxg1008 2008-01-09
  • 打赏
  • 举报
回复
int max,max2nd;

if(s[0]>s[1]){
max=0;
max2nd=1;
}else{
max=1;
max2nd=0;
}

for(int i=2;i<=s.length;i++){
if(s[i]>s[max2nd]){
if(s[i]>s[max]){
max2nd=max;
max=i;
}else{
max2nd=i;
}
}
}
老紫竹 2008-01-09
  • 打赏
  • 举报
回复
  public static void main(String[] args) {
String s[] = { "150", "45", "250", "232", "244", "189", "200", "219", "228" };
int max = Integer.MIN_VALUE;
int next = Integer.MIN_VALUE;
int indexMax = 0;
int indexNext = 0;
int index = 0;
int temp;
for (String ss : s) {
temp = Integer.parseInt(ss);
if (temp > max) {
next = max;
max = temp;
indexNext = indexMax;
indexMax = index;
} else if (temp > next) {
next = temp;
indexNext = index;
}
index++;
}
System.out.println(indexMax + "=" + max);
System.out.println(indexNext + "=" + next);
}
Spirit_Java 2008-01-09
  • 打赏
  • 举报
回复
这跟取最大值的算法有什么区别吗?你稍微改改不就行了

62,634

社区成员

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

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