获取数组最大值或最小值的下标集合。。。网上的有的有问题

evjen 2009-05-28 08:38:33
比喻说个数组
int[] intArray = { 1, 3, 7, 12, 12, 6, 1, 8 };

那么这个最大值的下标就是 3 ,4
最小值的下标就是 0,6

这个程序怎么写啊?
...全文
1185 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
無名小伙 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ojlovecd 的回复:]
参考:
C# code

static void Main(string[] args)
{
int[] intArray = { 1, 3, 7, 12, 12, 6, 1, 8 };
MyClass max = new MyClass(intArray[0]);
MyClass min ……
[/Quote]

好贴,但只考虑了数据是1 * k的情况,有没有考虑m*n的情况?即(int[][])
andrewbornglobal 2009-05-28
  • 打赏
  • 举报
回复
好贴
我姓区不姓区 2009-05-28
  • 打赏
  • 举报
回复
参考:

static void Main(string[] args)
{
int[] intArray = { 1, 3, 7, 12, 12, 6, 1, 8 };
MyClass max = new MyClass(intArray[0]);
MyClass min = new MyClass(intArray[0]);
for (int i = 0; i < intArray.Length; i++)
{
int j = intArray[i];
if (j > max.Value)
{
max.Value = j;
max.Indexes.Clear();
max.Indexes.Add(i);
}
else if (j < min.Value)
{
min.Value = j;
min.Indexes.Clear();
min.Indexes.Add(i);
}
else if (j == max.Value)
max.Indexes.Add(i);
else if (j == min.Value)
min.Indexes.Add(i);
}
Console.WriteLine("最大值为:{0},索引为:", max.Value);
foreach (int i in max.Indexes)
Console.Write("{0} ", i);
Console.WriteLine();
Console.WriteLine("最小值为:{0},索引为:", min.Value);
foreach (int i in min.Indexes)
Console.Write("{0} ", i);
}

class MyClass
{
private int value;
public int Value
{
get { return value; }
set { this.value = value; }
}

private List<int> indexes;
public List<int> Indexes
{
get { return indexes; }
set { indexes = value; }
}

public MyClass(int value)
{
this.value = value;
indexes = new List<int>();
indexes.Add(0);
}
}
/*
输出:
最大值为:12,索引为:
3 4
最小值为:1,索引为:
0 6
*/
绿色夹克衫 2009-05-28
  • 打赏
  • 举报
回复
用栈作就行,当值>max或<min,清空栈,将当前值入栈,=max或=min时入栈。
cnzdgs 2009-05-28
  • 打赏
  • 举报
回复
用一个变量保存当前最大值,初始化为MinValue;再用一个数组保存该最大值对应的下标。用一个循环逐一取数据与当前最大值比较,如果大于,则更新当前最大值,并清空下标数组;如果等于,则将下标添加到数组中;如果小于则不做任何处理。
xudongdong_1990 2009-05-28
  • 打赏
  • 举报
回复
C语言里有这方面的题目,你查查吧。
ltlljt13142 2009-05-28
  • 打赏
  • 举报
回复
up
guest_2009 2009-05-28
  • 打赏
  • 举报
回复
private void GetMp(out string maxs,out string mins)
{
int max=intArray[0];
int min=max;
maxs="";
mins="";
//找出最大和最小值
for(int i=1;i<intArray.length;i++)
{
if(intArray[i]>max)
{
max=intArray[i];
}
if(intArray[i]<min)
{
min=intArray[i];
}
}
//找出下标
for(int i=0;i<intArray.length;i++)
{
if(intArray[i]==max)
{
maxs+=i.ToString()+",";
}
if(intArray[i]==min)
{
mins+=i.ToString()+";";
}
}
maxs=maxs.SubString(0,maxs.Length-1);
mins=mins.SubString(0,mins.Length-1);
}
xudongdong1990 2009-05-28
  • 打赏
  • 举报
回复
数据结构里好像有这方面的题目
wuyq11 2009-05-28
  • 打赏
  • 举报
回复
int[] p = new int[100]; //存放所有的最大值
int position = 0;//存放最大值的位置
int j = 1;//存放相同最大值的位置

for (int i = 1; i < 100; i++)
{
if (intArray [i] > intArray [position])
{
position = i;
j = 1;
}
else if (intArray [i] == intArray [position])
{
p[j++] = i;
}
}
p[0] = position;

if (j < 100)
{
p[j] = -1;
}
Console.WriteLine("最大值为" + intArray [position]);
Console.WriteLine("最大值的位置为:");
for (int i = 0; i < 100; i++)
{
if (p[i] == -1)
break;
Console.WriteLine(p[i]+1);
}
Console.ReadLine();
evjen 2009-05-28
  • 打赏
  • 举报
回复
我就是这么想的
yeaicc 2009-05-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tcxx2008 的回复:]
先遍历数组找出最大值,然后用这个最大值和数组每个等值比较,符合的,加入到存放结果的数组.
就是要2次遍历数组了
[/Quote]



同意这种做法
tcxx2008 2009-05-28
  • 打赏
  • 举报
回复
先遍历数组找出最大值,然后用这个最大值和数组每个等值比较,符合的,加入到存放结果的数组.
就是要2次遍历数组了
修改一下昵称 2009-05-28
  • 打赏
  • 举报
回复
用循环一个一个比较吧。 。

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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