1. 程式人生 > 其它 >【劍指offer較難部分1】二維陣列中的查詢(java)

【劍指offer較難部分1】二維陣列中的查詢(java)

技術標籤:劍指offer資料結構java演算法

題目描述

在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
在這裡插入圖片描述

分析

方法一:暴力破解

public class Solution {
    public boolean Find(int target, int [][] array) {
        //1、暴力破解
        boolean flag = false;
        for(int i = 0 ; i < array.
length ; i++){ for(int j = 0 ; j < array[i].length ; j++){ if(array[i][j] == target){ flag = true; } } } return flag; } }

在這裡插入圖片描述
方法二:二分查詢
由於題中說明陣列橫縱都是有序的,那麼在有序這個條件下進行查詢,可以想到二分查詢。
思路:遍歷每一行子陣列,用二分查詢,判斷是在左半部分還是在右半部分。

public class Solution {
    public boolean Find(int target, int [][] array) {
        boolean flag = false;
        for(int i = 0 ; i < array.length ; i++){
            int low = 0;
            int high = array[i].length-1;
            while(low <= high){
                int mid = (low + high)/2
; if(target > array[i][mid]) low = mid+1; //左半部分 else if(target < array[i][mid]) high = mid-1; //右半部分 else{ flag = true; break; } } } return flag; } }

在這裡插入圖片描述