3 回答
TA贡献1808条经验 获得超4个赞
根据更新,我认为您的问题可以简化为:计算行或列中最小值或最大值的项目。如果没问题,你的算法是错误的,因为:
您正在检查列和行中的最小值(同时在两者中)
你没有检查最大值
您正在打印找到的号码
所以,你的策略应该是这样的:
在零中创建一个计数器
对于矩阵中的每个项目
检查他的行中是否是 min
检查他的行中是否最大
检查他的专栏中是否是 min
检查他的列中是否最大
如果一张支票没问题,增加计数器
打印或返回计数器
那应该对你有帮助。
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());
}
}
}
添加回答
举报