日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找

發布時間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

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

題目分析

圖 1

如果沒有頭緒的話,很顯然使用 暴力解法 是完全可以解決該問題的。

即遍歷二維數組中的每一個元素,時間復雜度:O(n^2)。

其實到這里我們就可以發現,使用這種暴力解法并沒有充分利用題目給出的信息。這個二維數組是有特點的。

  • 每一行都是遞增
  • 每一列都是遞增

圖 2

解法

解法一:二分法

對于有序數組的查找問題而言,二分法是最容易想到的一個解法。

在這里,對每一行使用二分查找,時間復雜度為 O(nlogn) 。二分查找復雜度 O(logn),一共 n 行,所以是總體的時間復雜度是 O(nlogn) 。

解法二:規律法

根據二維數組由上到下,由左到右遞增的規律。

從左下角開始遍歷,如果當前值比 target 小則往右找,如果比 target 大則往上找,如果存在,必然可以找到目標數字。

即選取右上角或者左下角的元素 a[row] [col] 與 target 進行比較, 當target小于元素 a[row] [col] 時,那么 target 必定在元素 a 所在行的左邊,讓 col-- ;當 target 大于元素 a[row] [col] 時,那么 target 必定在元素 a 所在列的下邊,讓 row++ ;

圖 3

代碼如下:

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

解法三:二分規律法

將解法一和解法二進行結合:對每行每列都使用二分查找,此時的時間復雜度為 O(logn * logm)

圖 4

比如查找數字 9,首先使用用二分查找選出一行,總共有 5 行,那么( 0 + 5 ) / 2 = 2,所以我們找出了第 2行為基準行。

圖 5

接下來對這一行(即第 2 行)又使用二分查找, 找出這一行(即第 2 行)中最后一個比目標值小的值,這里是 6。

圖 6

6 及其所在的行和列把這個矩形劃分為 4 部分:

圖 7

  • 左上部分(圖 7 灰色部分),包括所在行的左邊部分和所在列的上邊部分:這一部分是絕對不會有目標數字的。因為這部分數字肯定比 6 小,而 6 又是小于目標數字的,所以左上部分全部小于目標數字。也就是說這個區域的數字不需要再進行判斷了。
  • 右下部分(圖 7 綠色部分),包括所在行的右邊部分,但不包括所在列的下面部分, 這一部分也是絕對不會有目標數字的。因為這部分都比 6 右邊的數字 11 大,而 11 又比目標數字 9 更大,所以右下部分全部都比目標數字大。也就是說這個區域的數字也不需要再進行判斷了。
  • 左下部分(圖 7 藍色部分),可能含有目標數字。
  • 右上部分(圖 7 棕色部分),可能含有目標數字。
  • 這樣,實際上篩選的區域就只剩下左下部分(圖 7 藍色部分)右上部分(圖 7 棕色部分)這兩塊區域了,相比于解法二而言,使用這種解法平均情況下每一次查找,都可以把行和列的長度減少一半

    代碼如下:

    public class Solution { public boolean Find(int target, int [][] array) { // 特殊情況處理 if (array == null || array.length == 0 || array[0].length == 0) { return false; } int h = array.length - 1; int w = array[0].length - 1; // 如果目標值小于最小值 或者 目標值大于最大值,那肯定不存在 if (array[0][0] > target || array[h][w] < target) { return false; } return binarySearchIn2DArray(array, target, 0, h, 0, w); } public static boolean binarySearchIn2DArray(int[][] array, int target, int startX, int endX, int startY, int endY) { if (startX > endX || startY > endY) { return false; } //首先,根據二分法找出中間行 int x = (startX + endX) / 2; //對該行進行二分查找 int result = binarySearch(array[x], target, startY, endY); //找到的值位于 x 行,result 列 if (array[x][result] == target) { return true; // 如果找到則成功 } //對剩余的兩部分分別進行遞歸查找 return binarySearchIn2DArray(array, target, startX, x - 1, result + 1, endY) || binarySearchIn2DArray(array, target, x + 1, endX, startY, result); } public static int binarySearch(int[] array, int target, int start, int end) { int i = (start + end) / 2; if (array[i] == target || start > end) { return i; } else if (array[i] > target) { return binarySearch(array, target, start, i - 1); } else { return binarySearch(array, target, i + 1, end); } }}

    總結

    以上是生活随笔為你收集整理的在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人无码精品1区2区3区免费看 | 人人草在线视频 | 日韩avv| 欧洲性开放大片 | 欧美一区二区三区影视 | 国产小视频你懂的 | 国产成人在线视频播放 | 日韩激情在线观看 | 亚洲涩涩| 国产精品免费一区 | 成人依依 | 巨胸爆乳美女露双奶头挤奶 | 天天射综合网站 | av中文在线资源 | 亚洲精品456 | 精品无码国产av一区二区三区 | 欧美成人综合视频 | 丁香色欲久久久久久综合网 | 在线观看免费 | 日韩无码精品一区二区三区 | 亚洲干综合 | 国产四区视频 | 今天高清视频在线观看视频 | 亚洲国产精品视频在线观看 | 色婷婷综合久久 | 91在线看| 人妻久久久一区二区三区 | 中文字幕免费一区二区 | 夜间福利网站 | 全部免费毛片在线播放高潮 | 96日本xxxxxⅹxxx17 | 91在线色 | 黄片毛片 | 欧美美女一区二区 | 日韩三级观看 | 熟女av一区二区三区 | 色婷婷成人| 日本a在线播放 | 国产人妖一区二区 | 在线观看免费视频a | 不良视频在线观看 | 亚洲最大成人综合网 | 麻豆短视频 | 男女ss视频 | 日本三级片在线观看 | 老色批av | 国产一区二区在线免费观看视频 | 久久老司机 | 少妇视频网 | av天天色| 中文字幕一区二区三区不卡 | 成人妇女淫片aaaa视频 | 在线看黄网址 | 樱花草av| 象人高潮调教丨vk | 少妇做爰免费视看片 | 欧美精品免费一区二区 | 播播成人网 | 一级黄色录像大片 | 一区二区日韩在线观看 | 国产精品亚洲第一 | 成人免费观看视频大全 | 欧美 日韩 国产 成人 在线 91 | 国产真实伦对白全集 | 色黄视频在线观看 | 成人免费视频国产免费网站 | 亚洲精品女人 | 大尺度电影在线 | 亚洲成人黄色小说 | yy4138理论片动漫理论片 | 无遮挡aaaaa大片免费看 | 欧美自拍视频 | 国产又猛又黄又爽 | 国产又粗又黄又猛 | 久草www| 在线亚洲色图 | 亚洲AV成人无码久久精品巨臀 | 日日碰狠狠添天天爽 | www.伊人网| 人人超碰人人 | 天堂国产精品 | 国产六区| 一区二区免费 | 艹少妇视频 | 日韩av网站在线播放 | 九色porn蝌蚪 | 成人一级网站 | 亚欧在线观看 | 亚洲精品成人片在线观看精品字幕 | 亚洲精品一区二区三区精华液 | 久久久欧美精品sm网站 | 精品国产一区三区 | 成人区人妻精品一区二区不卡视频 | 免费黄网站在线观看 | 成年激情网 | 黄色aa视频 | 香蕉视频网页 | 成人手机视频在线观看 | 国产午夜大地久久 |