1. 程式人生 > 其它 >怎麼輸出一個二維陣列_劍指offer演算法題056:二維陣列中的查詢

怎麼輸出一個二維陣列_劍指offer演算法題056:二維陣列中的查詢

技術標籤:怎麼輸出一個二維陣列

小編在求職找找工作期間劍指offer上的演算法題刷了很多遍,並且 每道題小編當時都總結了一種最適合面試時手撕演算法的最優解法 考慮到 劍指offer演算法題在面試中的高頻出現 ,小編 每天和大家分享一道劍指offer上的演算法題,以及小編總結的答案。下面是 第056是 道劍指offer演算法題

題目描述

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

這個是二分查詢的變種題目,本質是二分查詢。二分查詢有一個點:以升序陣列為例:往右移動是大於[mid]的數,往左是小於arr[mid]的數,其中arr數目標陣列,mid是(low + high)/ 2。本題是半有序的矩陣,適配到二分查詢的關鍵是需要找到一個搜尋的起點,這個起點只有2種移動方向,向其中一個移動時,數值不斷變大,向另外一個方向移動時數值不斷減小。

在矩陣中,滿足上面條件的移動方向的搜尋起點有2個:矩陣的右上角和左下角。找到搜尋起點後就是簡單的二分查詢思想了,直接上程式碼,示例程式碼以矩陣的右上角為搜尋起點:

public class Solution {    public boolean Find(int target, int [][] array) {        int row = array.length;        int col = array[0].length;                 int i = 0,j = col-1;        while(i < row && j>=0){            int base = array[i][j];            if( target==base )                return true;            else if( target>base ){                    i++;            }else{ //target                j--;            }                     }        return false;    }}

猜你還想看

一個比較有意思的面試問題:MySQL自增ID用完了,怎麼辦?

長按,掃碼,關注

及時收看更多精彩內容

924fe362ee2bc7c6e1a8b0c8409dd912.png

博主:今日頭條大資料工程師專注:求職 面經 原始碼 java 大資料技術分享

點選”閱讀原文“:領取5T精品資料面試總結100+實戰專案

我知道你 “在看ccfdf5f6f36a5a54daad5f43a4309663.gif