對於一個m*n的整數矩陣,其中每一行和每一列的元素都按升序排列,設計一個高效的演算法判斷一個數值是否存在,並給出位置
阿新 • • 發佈:2019-01-03
package com.huanchuang.arvin.vo;
public class Finder {
private String findElement(int[][] matrix, int target) {
int row = 0, column = 0;
// 只要行還沒有達到最大值就繼續執行
while (row < matrix.length) {
int colMax = matrix[row].length - 1;// 用於獲取矩陣每一行的最大值
// 因為是行和列都是贈序的,只要指定的數在每一行的最小值和最大值之間,就返回true
if (matrix[row][column] <= target && matrix[row][colMax] >= target) {
for (int i = 0; i < matrix[row].length; i++) {
if (matrix[row][i] == target) {
return "matrix[" + row + "][" + i + "]";
}
}
} else {// 否則的話就自動去下一行進行比較
row++;
}
}
return "matrix[-1][-1]";// 返回-1表示不存在
}
public static void main(String[] args) {
int matrix[][] = { { 1, 2, 3 }, { 4, 5 }, { 7, 8, 9 } };
Finder finder = new Finder();
String location = finder.findElement(matrix, 6);
System.out.println("位置" + location);
}
}
public class Finder {
private String findElement(int[][] matrix, int target) {
int row = 0, column = 0;
// 只要行還沒有達到最大值就繼續執行
while (row < matrix.length) {
int colMax = matrix[row].length - 1;// 用於獲取矩陣每一行的最大值
// 因為是行和列都是贈序的,只要指定的數在每一行的最小值和最大值之間,就返回true
if (matrix[row][column] <= target && matrix[row][colMax] >= target) {
for (int i = 0; i < matrix[row].length; i++) {
if (matrix[row][i] == target) {
return "matrix[" + row + "][" + i + "]";
}
}
} else {// 否則的話就自動去下一行進行比較
row++;
}
}
return "matrix[-1][-1]";// 返回-1表示不存在
}
public static void main(String[] args) {
int matrix[][] = { { 1, 2, 3 }, { 4, 5 }, { 7, 8, 9 } };
Finder finder = new Finder();
String location = finder.findElement(matrix, 6);
System.out.println("位置" + location);
}
}