【leetcode-74】搜索二维矩阵
生活随笔
收集整理的這篇文章主要介紹了
【leetcode-74】搜索二维矩阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(較簡單,但犯錯太多)
編寫一個高效的算法來判斷?m?x?n?矩陣中,是否存在一個目標值。該矩陣具有如下特性:
- 每行中的整數從左到右按升序排列。
- 每行的第一個整數大于前一行的最后一個整數。
示例?1:
輸入: matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50] ] target = 3 輸出: true示例?2:
輸入: matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50] ] target = 13 輸出: false我的:二分,不難但下標轉換調試很久 執行用時 : 1 ms, 在Search a 2D Matrix的Java提交中擊敗了100.00% 的用戶 內存消耗 : 44.6 MB, 在Search a 2D Matrix的Java提交中擊敗了0.61% 的用戶public boolean searchMatrix(int[][] matrix, int target) {// 實際遇到其實可以遍歷放到數組中二分,這樣很簡單且題目并沒額外要求// 數組容易忽略不為空但是為[]的情況所以要判斷matrix.length != 0if (matrix == null || matrix.length == 0) {return false;}int row = matrix.length;int col = matrix[0].length;int end = row*col-1;int start = 0;while (start <= end) {int mid = (start + end)/2;int val = matrix[mid/col][mid%col]; //0-end數組下標轉矩陣下標就是這么簡潔,想復雜了if (val == target) {return true;} else if (val < target) {start = mid + 1;} else {end = mid - 1;}}return false;}
?
參考解法:比二分慢些但是邏輯簡單啊
執行用時 :?2 ms, 在Search a 2D Matrix的Java提交中擊敗了100.00%?的用戶 內存消耗 :?41.4 MB, 在Search a 2D Matrix的Java提交中擊敗了0.61%?的用戶首先選取右上角數字,如果該數字等于要查找的數字,查找過程結束;如果該數字大于要查找的數字,去掉此數字所在列;如果該數字小于要查找的數字,則去掉該數字所在行。重復上述過程直到找到要查找的數字,或者查找范圍為空。 public boolean searchMatrix(int[][] matrix, int target) {if(matrix.length == 0)return false;int row = 0, col = matrix[0].length-1;while(row < matrix.length && col >= 0){if(matrix[row][col] < target)row++;else if(matrix[row][col] > target)col--;elsereturn true;}return false;}?
?
?
?
轉載于:https://www.cnblogs.com/twoheads/p/10646943.html
總結
以上是生活随笔為你收集整理的【leetcode-74】搜索二维矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【glibc源码分析】--strcpy.
- 下一篇: 备份程序