最开始自己的思路:从对角线处元素开始查找,如果不是n*n矩阵,从最大的m*m矩阵对角线开始查找元素。
现在回头看,上面方法不太好
import java.util.Scanner;
public class Exam2 {
static int[][] arr = new int[3][3];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
int m = sc.nextInt();
arr[i][j] = m;
}
}
int l = sc.nextInt();
boolean flag = exist(l);
System.out.println(flag);
}
}
public static boolean exist(int l){
for(int k=0; k<3; k++){
if(arr[k][k] == l){
return true;
}else if(arr[k][k]<l && arr[k+1][k+1]>l){
for(int a=k;a<3;a++){
if(arr[k][a] == l){
return true;
}else if(arr[a][k] == l){
return true;
}
}
}
}
return false;
}
}
现在回头看,上面方法不太好
public class BinaryArraySearch {
public static void main(String[] args){
int[][] arr = {{1, 2, 8},{2, 4, 9},{4, 7, 10},{6, 8, 11}};
int k =5;
System.out.println(search(arr, k));
}
private static boolean search(int[][] arr, int k) {
if(arr == null){
return false;
}
int i=0;
int j=arr[i].length-1;
while(j>=0 && i<arr.length){
if(arr[i][j]>k){
j--;
}else if(arr[i][j]<k){
i++;
}else{
return true;
}
}
return false;
}
}