2011-12-15 3 views
1

У меня есть 2-мерный массив строк, и я бы хотел найти максимум каждые 13 элементов.Получение min и max секций массива

Массив массива [Дата строки] [Цена строки1] [Цена строки2]. Я бы хотел, чтобы максимальная цена1 0-12, затем цена1 1-13, затем цена1 2-14 и т. Д.

{1,2,3,4,5,6,7,8,9,10, 9,8,11,6,5,4,3,2,1}

Первый список из 13 {1,2,3,4,5,6,7,8,9,10,9, 8,7} возвращают бы 10

второй список из 13 {2,3,4,5,6,7,8,9,10,9,8,7,11} возвратит 11

третий список из 13 {3,4,5,6,7,8,9,10,9,8,7,11,6} вернется 11 и т. д.

Редактировать Извините, что это было немного запутанно, массив представляет собой двумерный массив строк, первый столбец - это даты, а второй и третий - удваиваются. Я хотел бы найти максимум 2-го столбца и мин третьего.

вот что я получил:

String str = ""; 

    for(int ii = 1 ; ii < array.length ; ii++){ 
     str = str+array[ii][2]+","; 

     if(ii==13){ 

      str = Math.max(str.substring(0, str.lastIndexOf(',', str.lastIndexOf(',') - 1))); 

      System.out.println(str); 
     } 
    } 
+0

пожалуйста, включите то, что пытались до сих пор ... –

+0

я немного запутался. Не будет ли 'array [String date] [String price1] [String price2]' быть трехмерным массивом? Когда вы говорите о '{1,2,3,4,5,6,7,8,9,10,9,8,11,6,5,4,3,2,1}' и его частях, не будет ли это 1D-массив? Кроме того, вы могли бы опубликовать код, который вы пытались до сих пор, с какой конкретной частью этой задачи вы столкнулись? –

+1

Имея строку для указания цены и нахождения макс? Почему бы не использовать int, float и т. Д.? – Jayan

ответ

1

Вот мое решение (если вы имеете дело с целым массивом).

НО вы говорите [дата String] [String price1] [String price2] на первом и

позже вы дали пример: первый список из 13 {1,2,3, 4,5,6,7,8,9,10,9,8,7} вернет 10 второй список из 13 {2,3,4,5,6,7,8,9,10,9,8 , 7,11} вернет 11, третий список из 13 {3,4,5,6,7,8,9,10,9,8,7,11,6} вернется 11 и т.д. Просьба быть четкой об этом.

КОД:

public class SO_MinMaxArrayGroups { 
    public static void main(String[] args) { 
     int arr[] = new int[] { 1, 2, -3, 4, 5, 6, 17, 13, 14, 14, 14, 12, 1, 2, 2, 4, 3, 4,1, 2, 3, 4, 5, 6, 12, 13, -14, 14, 14, 12, 1, 2, 2, 4, 3, 4,1,4,7 }; 
     for (int i = 0; i < 3; i++) { 
      int max = arr[13*i]; 
      int min = arr[13*i]; 
      for (int j = i * 13; j < (i + 1) * 13; j++) { 
       //System.out.println("Checking :" + arr[j]); 
       if (arr[j] > max) { 
        max = arr[j]; 
       } 
       if (arr[j] < min) { 
        min = arr[j]; 
       } 
      } 
      System.out.println("Secion :"+(i+1)+" Max : " + max + " Min : " + min); 
     } 
    } 
} 

Результат:

Secion :1 Max : 17 Min : -3 
Secion :2 Max : 13 Min : 1 
Secion :3 Max : 14 Min : -14 
0

, если вы имеете дело с числами, массив не должен быть хранящие строки (сравнение становится сложнее между 1,11 и 2 («2»> '11 ') :-)

copy ranges в другой массив и создать дерево из диапазонов, которые можно использовать для извлечения минимальных и максимальных чисел.

HTH!

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