怎麼輸出一個二維陣列_劍指offer演算法題056:二維陣列中的查詢
阿新 • • 發佈:2021-01-04
技術標籤:怎麼輸出一個二維陣列
小編在求職找找工作期間劍指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用完了,怎麼辦?
長按,掃碼,關注
及時收看更多精彩內容
博主:今日頭條大資料工程師專注:求職 面經 原始碼 java 大資料技術分享
點選”閱讀原文“:領取5T精品資料,面試總結、100+實戰專案
我知道你 “在看”