Итак, я работаю над преобразованием этой логики из 2D-приложения в функцию в массиве 1D. Вещь, которая в основном сбивает меня с толку, это массивы и их функционирование. Любой вход был бы оценен!Преобразование из 2D в 1D массив
LcgRandom rand = new LcgRandom();
\t \t
\t \t int[][] triangle = new int[ROWS][];
\t \t
\t \t for (int i = 0; i < triangle.length; i++) {
\t \t \t triangle[i] = new int[i + 1];
\t \t \t //System.out.println(triangle[i]);
\t \t \t for (int j = 0; j <= i; j++)
\t \t \t \t triangle[i][j] = rand.next();
\t \t \t \t //System.out.println(triangle[i]);
\t \t }
\t \t
\t \t //Calculate row sums
\t \t int[][] rowSums = new int[triangle.length][];
\t \t
\t \t for (int i = 0; i < rowSums.length; i++) {
\t \t \t rowSums[i] = new int[triangle[i].length + 1];
\t \t \t rowSums[i][0] = 0;
\t \t \t for (int j = 0; j <= i; j++)
\t \t \t \t rowSums[i][j + 1] = rowSums[i][j] + triangle[i][j];
\t \t }
\t \t
\t \t //find the smallest triangle
\t \t long minSum = 0;
\t \t
\t \t for (int i = 0; i < triangle.length; i++) {
\t \t \t for (int j = 0; j < triangle[i].length; j++) {
\t \t \t \t
\t \t \t \t long curSum = 0;
\t \t \t \t for (int k = i; k < triangle.length; k++) {
\t \t \t \t \t curSum += rowSums[k][k - i + 1 + j] - rowSums[k][j];
\t \t \t \t \t if (minSum>curSum)
\t \t \t \t \t \t minSum=curSum;
\t \t \t \t \t System.out.println(minSum);
\t \t \t \t }
\t \t \t }
\t \t }
\t \t return Long.toString(minSum);
\t }
Так что это итерация через «треугольные» данные означает, что будут «высоты» * «высота» +1 запись данных? Или вы говорите, что прямая реализация может быть изменена с помощью вышеприведенного фрагмента? – TurdSchnugle
Вы можете выделить элементы 'r * c' и выполнить итерацию с приведенной выше логикой (для индексирования), а если вы делаете правильно, она должна быть идентична 2D-случаю. Если для каждой строки нет столбцов, то ваш 'C' соответственно изменится. –