Мой вопрос заключается в том, чтобы найти различное количество позиционных элементов в матрице 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 как на или вопрос.
@ Guy Извините, я пытался много раз, но выход не удался ..
@lancerfree, но вы не показали нам свои попытки и свои ошибки, как вы можете узнать, если вы не исправляете свои ошибки ?. Мы будем рады помочь вам исправить эти ошибки. Пожалуйста, отредактируйте свой вопрос и добавьте свой код и ошибку.
@RafaelPalomino Спасибо за предложение ... Я отредактировал вопрос .. Если возможно, попробуйте мне помочь ..
@lancerfree На данный момент отсутствует одна из круглых скобок '}', поэтому он не будет компилироваться. Кроме того, плохая идентификация затрудняет задачу понять, как вы пытаетесь выполнять свою функцию. Pd: Я посмотрю, чем могу помочь вам на работе.
@ Рафаэль Паломино. Спасибо за мою ошибку и за вашу помощь ...
@ Парень, надеюсь, теперь ты правильно понял мой вопрос
@lancerfree Я не знаю, почему на выходе должно быть 7.
@Guy В моем примере с матрицей 3 * 3, оставляющей 5 и 3, все остальные числа имеют минимальное и максимальное значение в строке и столбце, как я уже упоминал. Итак, всего 9 из 7 чисел имеют минимальное и максимальное значение в строке и столбце. 5 и 3 числа, у него нет ни min, ни max в строке и столбце. Итак, ожидаемый результат - 7. Вам нужно найти числа в матрице, которые имеют минимальное и максимальное значение в строке и столбце ..... Надеюсь, вы теперь поняли.
@ Guy, я тоже запутался так же, как и вы, когда увидел вопрос в первый раз .... На самом деле вопрос ясен, но у нас нет времени, чтобы прочитать его должным образом и выполнить его в соответствии с выводом ..
@ user3181365 Надеюсь, вы знаете ответ на мой вопрос ..
@RafaelPalomino Получили ли вы что-нибудь на своем рабочем месте ... Пожалуйста, помогите мне ... Я также стараюсь изо всех сил, чтобы получить правильный результат в соответствии с вопросом ..
@ 200_success вы можете помочь мне в решении этого вопроса ..




Основываясь на обновлениях, я думаю, что вашу проблему можно упростить следующим образом: подсчитать минимальные или максимальные элементы в строке или столбце. Если это нормально, ваш алгоритм неверен, потому что:
Итак, ваша стратегия должна быть примерно такой:
Это должно вам помочь.
Отлично, вы точно поняли мой вопрос ... Я пробовал ваш способ, но все еще не могу получить результат 7 ... Не могли бы вы предоставить мне фрагмент кода ...
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];
}
}
}
Вероятно, вы ищете это-
#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;
}
Я думаю, что это можно сделать лучше = быстрее, но мой O(n^2):
import java.util.HashSet;
import java.util.Set;
public class Main {
public static int[][] input = {
{1, 3, 4},
{5, 2, 9},
{8, 7, 6}
};
public static void main(String[] args) {
int numberOfElements = 0;
Set<Integer> numberOfUniqueElements = new HashSet<>();
Set<Integer> specialElements = new HashSet<Integer>();
for (int i = 0; i < input.length; i++) {
int maxInRow = Integer.MIN_VALUE;
int minInRow = Integer.MAX_VALUE;
int maxInColumn = Integer.MIN_VALUE;
int minInColumn = Integer.MAX_VALUE;
for (int j = 0; j < input[i].length; j++) {
numberOfElements++;
numberOfUniqueElements.add(input[i][j]);
if (input[i][j] > maxInRow) {
maxInRow = input[i][j];
}
if (input[i][j] < minInRow) {
minInRow = input[i][j];
}
if (input[j][i] > maxInColumn) {
maxInColumn = input[j][i];
}
if (input[j][i] < minInColumn) {
minInColumn = input[j][i];
}
}
specialElements.add(minInRow);
specialElements.add(maxInRow);
specialElements.add(minInColumn);
specialElements.add(maxInColumn);
}
if (numberOfUniqueElements.size() != numberOfElements) {
System.out.println("-1");
} else {
System.out.println(specialElements.size());
}
}
}
Вы не только бросили здесь домашнее задание, не продемонстрировав никаких попыток, но и даже не опубликовали вопрос полностью. Пожалуйста, пройдите stackoverflow.com/help/how-to-ask