Найти специальные элементы в матрице am * n - PullRequest
0 голосов
/ 03 октября 2018

Мой вопрос о том, чтобы найти различное количество позиционных элементов в матрице m * n, которые являются либо минимальным, либо максимальным в соответствующей строке или столбце. Ниже приведен мой фрагмент кода.

static void findSpecialElement(int[][] matrix)  
{  
    for (int i = 0; i < matrix.length; i++)  
    {  
        int rowMin = matrix[i][0];               
        int colIndex = 0;           
        boolean specialElement = true;

        for (int j = 1; j < matrix[i].length; j++)
        {
            if(matrix[i][j] < rowMin)
            {
                rowMin = matrix[i][j];                     
                colIndex = j;
            }
        } 
        for (int j = 0; j < matrix.length; j++)
        {
            if(matrix[j][colIndex] > rowMin)
            {
                specialElement = false;                     
                break;
            }
        }

        if(specialElement)
        {
            System.out.println("Special Element is : "+rowMin);
        }
    }
}

Например: для заданной матрицы размера 3 * 3 элементы сохраняются следующим образом:

1  3  4
5  2  9
8  7  6

Ожидаемый результат - 7

, оставляя 5 и 3 , все остальные числа в матрице имеют либо минимальное, либо максимальное встрока и столбец. Итак, 7 из 9 чисел имеют минимальное или максимальное значения.

Тогда 7 - это выход

Пожалуйста, , верните -1 , если любой ряд или любой столбец имеет кратный минимум или максимум элементов...

Моя ошибка - это я Не удалось получить ожидаемый ответ 7 как за вопрос .

Ответы [ 3 ]

0 голосов
/ 04 октября 2018
int maxNum = matrix[0][0];   int minNum = matrix[0][0];

for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        if(maxNum < matrix[i][j]){
        maxNum = matrix[i][j];
    }
    else if (minNum > matrix[i][j]) {
        minNum = matrix[i][j];
    }    
  }   
}
0 голосов
/ 29 июля 2019

Вероятно, вы ищете это -

#include <bits/stdc++.h>

using namespace std;

string ltrim(const string &);
string rtrim(const string &);
vector<string> split(const string &);


// Complete the countSpecialElements function below.
int countSpecialElements(vector<vector<int>> matrix) {

int m = matrix.size();          //rows
int n = matrix[0].size();       //columns



int maxrow[102] , minrow[102];
int maxcol[102], mincol[102];
for(int p=0;p<102;p++){
    maxrow[p] =0 ;
    maxcol[p] = 0;
    minrow[p]=0;
    mincol[p]=0;
}

int k=0;
int i,j;

for(i=0;i<m;i++){
    int rminn = INT_MAX;
    int rmaxx = INT_MIN;
    for(j=0;j<n;j++){
        if(matrix[i][j]==rmaxx || matrix[i][j]==rminn) return -1;
        if(matrix[i][j] > rmaxx ) rmaxx = matrix[i][j];
        if(matrix[i][j] < rminn) rminn = matrix[i][j];
    }
    maxrow[i] = rmaxx;
    minrow[i] = rminn;

    for(j=0;j<n;j++){
        int cminn = INT_MAX;
        int cmaxx = INT_MIN;
        for(int p=0;p<m;p++){
            if(matrix[p][j]== cmaxx || matrix[p][j] == cminn) return -1;
            if(matrix[p][j] > cmaxx ) cmaxx = matrix[p][j];
            if(matrix[p][j] < cminn) cminn = matrix[p][j];
        }

        maxcol[j] = cmaxx;
        mincol[j] = cminn;
    }
}

    int cnt = 0;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            if((matrix[i][j]== maxrow[i])||(matrix[i][j]==minrow[i])||(matrix[i][j]==maxcol[j])||(matrix[i][j]==mincol[j]))
                cnt++;
        }
    }
    return cnt;
}
0 голосов
/ 04 октября 2018

Основываясь на обновлениях, я думаю, что ваша проблема может быть упрощена следующим образом: Подсчитайте элементы, которые являются минимальными или максимальными в строке или столбце.Если все в порядке, ваш алгоритм неверен, потому что:

  • Вы проверяете мин в столбце и строке (в обоих одновременно)
  • Вы не проверяете макс.
  • Вы печатаете найденное число

Итак, ваша стратегия должна выглядеть примерно так:

  • создать счетчик в нуле
  • для каждого элемента в матрице
    • проверка, является ли min в его строке
    • проверка, является ли max в его строке
    • проверка, является ли min в его столбце
    • проверьте, есть ли максимум в его столбце
    • если одна проверка в порядке, увеличьте счетчик
  • распечатайте или верните счетчик

Это должнопомочь вам.

...