題目:在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序,請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數,
思路:該二維陣列中的某一個數,小于它的數一定在它的左邊,大于它的數一定在它的下面,所以可以從右上角開始查找,
- 代碼如下
3 /* 4 在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序, 5 每一列都按照從上到下遞增的順序排序,請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數, 6 */ 7 public class Demo5 { 8 9 public static void main(String[] args) { 10 11 //定義一個二維陣列 12 int[][] arr = new int[][]{{1, 4, 7, 11, 15}, 13 {2, 5, 8, 12, 19}, 14 {3, 6, 9, 16, 22}, 15 {10, 13, 14, 17, 24}, 16 {18, 21, 23, 26, 30}}; 17 printArray(arr); 18 19 boolean find = Find(20, arr); 20 System.out.println(find); 21 } 22 23 /** 24 * 判斷陣列中是否有指定的數 25 * @param target 目標數 26 * @param array 傳入此方法的二維陣列 27 * @return 28 */ 29 public static boolean Find(int target, int [][] array) { 30 if(array == null || array.length == 0 || array[0].length == 0){ 31 return false; 32 } 33 34 int row = array.length; 35 int col = array[0].length; 36 //找到二維陣列右上角的坐標值 37 int r = 0; 38 int c = col-1; 39 40 while(r < row-1 && c >=0){ 41 if(target == array[r][c]){ 42 return true; 43 }else if(target > array[r][c]){ 44 r++; 45 }else{ 46 c--; 47 } 48 } 49 return false; 50 } 51 52 /** 53 * 列印二維陣列 54 * @param arr 55 */ 56 public static void printArray(int[][] arr) { 57 for (int i = 0; i < arr.length; i++) { 58 for (int j = 0; j < arr[i].length; j++) { 59 System.out.print(arr[i][j]+"\t"); 60 } 61 System.out.println(); 62 } 63 } 64 65
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/62065.html
標籤:其他
上一篇:【WPF學習】第三十章 元素系結——系結到非元素物件
下一篇:7-替換空格
