已知條件:1. 二維數組行數和列數相同; 2. 每一行從左到右,每一列從上到下遞增;java
解題思路:選取左下角或右上角的數組元素:1. 選取左下角元素,當 target 大於 左下角元素時,列數加1;當 target 小於左下角元素時,行數減1;2. 選取右上角元素, 當 target 小於右上角元素時,列數減1;當 target 大於右上角元素時,行數加1;以左下角元素爲例,代碼以下:數組
1 import java.util.Scanner; 2 3 public class Solution { 4 public static void main(String[] args) { 5 Scanner scanner = new Scanner(System.in); 6 int n = scanner.nextInt(); 7 int [][] array = new int[n][n]; 8 scanner.nextLine(); 9 //用來跳過行列後的回車符 10 for(int i=0 ; i<n ; i++) { 11 String [] str = scanner.nextLine().split(" "); 12 for(int j=0 ; j<str.length ; j++) { 13 array[i][j] = Integer.parseInt(str[j]); 14 } 15 } 16 int target = scanner.nextInt(); 17 boolean result = Find(target, array); 18 System.out.println(result); 19 } 20 21 public static boolean Find(int target, int [][] array) { 22 // 解題思路:二維數組每一行和每一列都是遞增的,取左下角或右上角的元素與target進行對比 23 // 以左下角爲例 24 int row = array.length-1; 25 int col = 0; 26 while(row >= 0 && col <= array[0].length-1) { 27 if(array[row][col] == target) 28 return true; 29 else if(array[row][col] > target) 30 row--; 31 else 32 col++; 33 } 34 return false; 35 } 36 }