Java實如今一個二維數組中(每一個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整

已知條件: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 }        
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息
相關文章