亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號