请注意,数组中的所有值都可能为负数。我不能使用内置的Max或Sort功能。例如,找到一系列数字中的最大值,例如42,80,93,62,71。
有什么不同的方法可以做到这一点?我只使用内置函数进行了平均。
你不必完成它,只需指出正确的方向。
string res = “”;
int[] arr = { 42, 80, 93, 62, 71 };
for (int k = 0; k < arr.Length; k++)
{
for (int i = 0; i < arr.Length – 1; i++)
{
if (arr[i] > arr[i + 1])
{
int hold = arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = hold;
}
}
res += arr[k].ToString();
arr[k] = arr[k];
}
答案 0 :(得分:1)
一个简单的递归代码示例:
static int Max(int[] array, int startIndex = 0)
{
// current value
int current = array[startIndex];
// stop condition for recursion
if (startIndex + 1 == array.Length)
{
return current;
}
// recursion
int nexts = Max(array, startIndex + 1);
// simple comparison
if (current >= nexts)
{
return current;
}
return nexts;
}
不是您应该使用的解决方案。使用递归来解决这个问题错误(但它表明同一问题有多种解决方案)
使用它像:
int[] array = new int[] { 5, 4, 3, 2, 6 };
int max = Max(array);
答案 1 :(得分:1)
查看序列的一种方法是{first element,tail}对。这样很明显,max是尾部的第一个元素OR max。大多数语言支持某种分裂列表/序列 - 即C#/。Net为您提供Enumerable
类:
T Max<T>(IEnumerable<T> list)where T: IComparable<T>
{
var first = list.First();
var tail = list.Skip(1);
{
if (!tail.Any())
return first;
}
var maxTail = Max(tail);
return maxTail.CompareTo(first) > 0 ? maxTail : first;
}
注意:
.Any()
)答案 2 :(得分:0)
这应该适合你:
int max = int.MinValue;
for(var i = 0; i < arr.Length; i++){
if (arr[i] > max){
max = arr[i];
}
}
我使用数据int[]{-1,-2,-152 ,-7,-5,-4,-3,-19};
进行了测试,结果为-1。我将它们全部翻转为正面,然后返回152.
答案 3 :(得分:0)
为什么不
int[] arr = { 42, 80, 93, 62, 71 };
int maxValue = arr[0];
foreach(int i in arr){
if (maxValue < i) maxValue = i;
}
Console.WriteLine("Max Value={0}", maxValue);
答案 4 :(得分:0)
static int max = 0;
public static int maxAmt(int [] arr, int startIndex = 0)
{
int current = arr[startIndex];
int next = 0;
if (arr[startIndex] + 1 == arr.Length && current > max)
{
max = current;
return max;
};
if (current < max)
{
return max;
};
if(startIndex < arr.Length -1)
next = maxAmt(arr, startIndex + 1);
if (current > next)
return current;
else
return next;
}
答案 5 :(得分:0)
public static int MaximumNumber(params int[] numbers)
{
int max = 0;
for(int i=0; i<numbers.Length-1; i++)
{
if( numbers[i]>numbers[i+1] & numbers[i]>max )
{
max = numbers[i];
}
else if(numbers[i+1]>max)
{
max = numbers[i + 1];
}
}
return max;
}