- 浏览: 183761 次
- 性别:
- 来自: 济南
文章分类
最新评论
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target = 3, return true.
在二维数组中找到一个目标元素,矩阵中每一行都是升序排列的,并且每一行的元素都比它的上一行的包含的元素大。如果是一位数组我们很容以就想到用二分查找法,对于这道题,只不过是从m个有序数组中查找一个元素,我们可以用两次二分查找,第一个找到target在哪个组,确定target可能在的组之后,在用一次二分查找遍历这个组。在确定组的时候,如果target大于当前元素时,我们不能直接将left = mid + 1; 我们要检查mid组中最大的元素和target的大小,因为target可能在mid组中。代码如下:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target = 3, return true.
在二维数组中找到一个目标元素,矩阵中每一行都是升序排列的,并且每一行的元素都比它的上一行的包含的元素大。如果是一位数组我们很容以就想到用二分查找法,对于这道题,只不过是从m个有序数组中查找一个元素,我们可以用两次二分查找,第一个找到target在哪个组,确定target可能在的组之后,在用一次二分查找遍历这个组。在确定组的时候,如果target大于当前元素时,我们不能直接将left = mid + 1; 我们要检查mid组中最大的元素和target的大小,因为target可能在mid组中。代码如下:
public class Solution { public boolean searchMatrix(int[][] matrix, int target) { if(matrix == null || matrix.length == 0) return false; int m = matrix.length; int n = matrix[0].length; int l = 0; int r = m - 1; int mid = 0; while(l <= r) { mid = l + (r - l) / 2; if(target == matrix[mid][0]) return true; if(matrix[mid][0] > target) r = mid - 1; else { if(target > matrix[mid][n - 1]) l = mid + 1; else break; } } l = 0; r = n - 1; while(l <= r) { int mmid = l + (r - l) / 2; if(target == matrix[mid][mmid]) return true; if(target > matrix[mid][mmid]) l = mmid + 1; else r = mmid - 1; } return false; } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 265Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 267You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 384Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 374Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 500Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 563Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 475Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 664Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 469The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 430Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 575Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 581Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 426All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 898Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 930Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 602Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 677Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 845Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 783You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 708For a undirected graph with tre ...
相关推荐
在LeetCode平台上,"Search a 2D Matrix"是一道非常经典的编程问题,它涉及到二维矩阵的操作和二分查找算法的应用。本题目的目标是设计一个高效的算法,在一个由整数组成的矩阵中查找指定的目标值,如果找到,返回其...
python python_leetcode题解之074_Search_a_2D_Matrix
javascript js_leetcode题解之74-search-a-2d-matrix.js
c c语言_leetcode题解之0074_search_a_2d_matrix.zip
c语言入门 C语言_leetcode题解之74-search-a-2d-matrix.c
A repo for popular coding interview problems mainly from Leetcode. 二分搜索/有序数组旋转 Find Minimum In Rotated Sorted Array Find Minimum In Rotated Sorted Array II Search In Rotated Sorted Array ...
第74题,名为“Search a 2D Matrix”(搜索二维矩阵),是其中的一道经典问题。这道题目要求你在一个二维矩阵中查找一个特定的元素。让我们深入探讨这个问题,以及如何用C++来解决它。 首先,二维矩阵是C++中常见的...
- Search a 2D Matrix II(二维矩阵中的搜索II) - Find Peak Element(寻找峰值元素) - Search in Rotated Sorted Array(在旋转排序数组中搜索) - Search in Rotated Sorted Array II(在旋转排序数组中搜索...
* Search a 2D Matrix:该题目要求在二维矩阵中查找元素,实现方法使用了二分查找算法。 * Rotate Image:该题目要求将二维矩阵旋转90度,实现方法使用了循环移位的方法。 五、其他 * Set Matrix Zeroes:该题目...
- **Search a 2D Matrix**:在二维矩阵中搜索目标值。 - **Search for a Range**:在一个排序数组中查找目标值的第一个和最后一个位置。 - **Search Insert Position**:在排序数组中查找目标值的插入位置。 2. ...
* [Breadth-First Search](https://github.com/kamyu104/LeetCode#breadth-first-search) * [Depth-First Search](https://github.com/kamyu104/LeetCode#depth-first-search) * [Backtracking]...
- **二维矩阵查找(Search a 2D Matrix)** - 在一个按行、列都升序排列的二维矩阵中查找一个元素。 - **查找峰值元素(Find Peak Element)** - 在一个一维数组中找到一个峰值元素。 - **旋转排序数组中的搜索(Search...
- **搜索二维矩阵(Search a 2D Matrix)**: 在一个m x n 的二维矩阵中查找一个特定的目标值。 - **搜索区间(Search for a Range)**: 在一个按升序排列的数组中查找目标值的起始和结束位置。 - **搜索插入位置(Search ...
- Search a 2D Matrix: 编写一个高效的算法来搜索m×n矩阵中的值,该矩阵每一行都按升序排列,每一列也都按升序排列。 - Sort Colors: 给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得...
- **查找矩阵中的位置(Search a 2D Matrix)**: 在一个排序的矩阵中查找一个数字的位置。 #### 特殊算法 - **查找峰值元素(Find Peak Element)**: 在一个无序数组中找到任意一个局部最大值。 - **在旋转排序数组中...
1. Introduction 2. Array i. Remove Element ii. Remove Duplicates from Sorted Array iii.... Search a 2D Matrix xii. Search for a Range xiii. Search Insert Position xiv. Find Peak Element
Search a 2D Matrix II 替换空格 从尾到头打印链表 重建二叉树 105. Construct Binary Tree from Preorder and Inorder Traversal 用两个栈实现队列 232. Implement Queue using Stacks 旋转数组的最小数字 153. ...
LeetCode判断字符串是否循环 LC ...search a 2d matrix ii. 每次仅能将搜索区域缩减为之前的3/4,效率一般。从左下角或右上角扫描矩阵,时间复杂度为O(m+n)代码简单,且有较高的效率。 perfect squa
Search a 2D Matrix I240. Search a 2D Matrix II2. Add Two Numbers50. Pow(x, n)34. First & LastPositionElementInSortedArr94. Binary Tree Inorder Traversal144. Binary Tree Preorder Traversal145. Binary ...