2015-03-10 2 views
-5

Обратите внимание, что все значения в массиве могут быть отрицательными. Я не могу использовать встроенную функцию Max или Sort. Например, найдите наибольшее значение в серии чисел, таких как 42, 80, 93, 62, 71.Найти наибольшее значение в несортированном массиве целых чисел без использования встроенной функции Max/Sort

Какими разными способами я могу это сделать? Я только усредняю, используя встроенную функцию.

Вам не нужно его заполнять, просто укажите мне правильное направление.

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

это домашнее задание ..? – MethodMan

+1

Вы можете использовать цикл и переменную 'max'. Затем сравнивайте каждое значение с этим значением 'max' и перезаписывайте, когда это необходимо. –

+2

Держите переменную с «наивысшим, что вы видели до сих пор», начиная с первого значения (или int.MinValue). Итерируйте по номерам, обновив «наивысший вид», если следующее значение, которое вы видите, выше. –

ответ

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

Один из способов взглянуть на последовательности пары {первого элемента , хвост}. Таким образом, очевидно, что max является либо первым элементом OR max из хвоста. Большинство языков поддерживает какую-то списки spltting/последовательностей - то есть 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; 
} 

Примечания:

  • никогда не использовать его в реальной жизни, как есть, не -recursive решения
  • как написано коллекция итерации дважды (для .Any())
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.

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); 
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; 

    } 
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; 
    } 
+0

Привет, добро пожаловать в SO. Пожалуйста, не просто дайте код в качестве ответа, объясните свои мысли, чтобы другие пользователи могли понять, что происходит. Приветствия. – Cthulhu

Смежные вопросы