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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode-剑指 Offer 04. 二维数组中的查找

發布時間:2025/4/5 编程问答 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode-剑指 Offer 04. 二维数组中的查找 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

劍指 Offer 04. 二維數組中的查找

思路一:暴力解法,兩層for循環查找

時間復雜度為:O(nm)

空間復雜度為:O(1)

class Solution { public:bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {if(matrix.empty()) return false;int n = matrix.size(); //行數int m = matrix[0].size(); //列數for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(matrix[i][j]==target){return true;}}}return false;} };

思路二:如下圖所示,我們將矩陣逆時針旋轉 45° ,并將其轉化為圖形式,發現其類似于 二叉搜索樹 ,即對于每個元素,其左分支元素更小、右分支元素更大。因此,通過從 “根節點” 開始搜索,遇到比 target 大的元素就向左,反之向右,即可找到目標值 target 。

“根節點” 對應的是矩陣的 “左下角” 和 “右上角” 元素,本文稱之為 標志數 ,以 matrix 中的 左下角元素 為標志數 flag ,則有:

若 flag > target ,則 target 一定在 flag 所在 行的上方 ,即 flag 所在行可被消去。
若 flag < target ,則 target 一定在 flag 所在 列的右方 ,即 flag 所在列可被消去。
算法流程:
從矩陣 matrix 左下角元素(索引設為 (i, j) )開始遍歷,并與目標值對比:

  • 當 matrix[i][j]> target 時,執行 i-- ,即消去第 i 行元素;
  • 當 matrix[i][j] < target 時,執行 j++ ,即消去第 j 列元素;
  • 當 matrix[i][j] = target 時,返回 truetrue ,代表找到目標值

2.若行索引或列索引越界,則代表矩陣中無目標值,返回 false 。

  • 每輪 i 或 j 移動后,相當于生成了“消去一行(列)的新矩陣”, 索引(i,j) 指向新矩陣的左下角元素(標志數),因此可重復使用以上性質消去行(列)。
class Solution { public:bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {if(matrix.empty()) return false;//從左下角開始往上搜索int i = matrix.size()-1;int j = 0;while(i>=0&&j<matrix[0].size()){ //循環搜索if(matrix[i][j]>target){i--;}else if(matrix[i][j]<target){j++;}else {return true;}}return false;} }; class Solution { public:bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {if(matrix.empty()) return false;//從左上角開始往下搜索int i = 0;int j = matrix[0].size()-1;while(i<matrix.size()&&j>=0){ //循環搜索if(matrix[i][j]<target){i++;}else if(matrix[i][j]>target){j--;}else {return true;}}return false;} };

總結

以上是生活随笔為你收集整理的LeetCode-剑指 Offer 04. 二维数组中的查找的全部內容,希望文章能夠幫你解決所遇到的問題。

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