为了账号安全,请及时绑定邮箱和手机立即绑定

在 am*n 矩阵中查找特殊元素

在 am*n 矩阵中查找特殊元素

扬帆大鱼 2021-10-27 10:05:26
我的问题是要在 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  45  2  98  7  6预期输出为 7留下5和3中的矩阵中的所有其它号码具有任一的最低或最高行和column.So,7出9号的具有最小或最大的值。然后7是输出请返回 -1,如果任何行或任何列有多个最小或最大元素...我的错误就是我未能获得预期的答案7为每的问题。
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

根据更新,我认为您的问题可以简化为:计算行或列中最小值或最大值的项目。如果没问题,你的算法是错误的,因为:

  • 您正在检查列和行中的最小值(同时在两者中)

  • 你没有检查最大值

  • 您正在打印找到的号码

所以,你的策略应该是这样的:

  • 在零中创建一个计数器

  • 对于矩阵中的每个项目

    • 检查他的行中是否是 min

    • 检查他的行中是否最大

    • 检查他的专栏中是否是 min

    • 检查他的列中是否最大

    • 如果一张支票没问题,增加计数器

  • 打印或返回计数器

那应该对你有帮助。


查看完整回答
反对 回复 2021-10-27
?
呼唤远方

TA贡献1856条经验 获得超11个赞

我认为它可以以更好=更快的方式完成,但我的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());

        }

    }

}


查看完整回答
反对 回复 2021-10-27
  • 3 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信