当前位置: 首页 > news >正文

LeetCode -- Search Matrix

题目描述:


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.


就是在一个矩阵中找到1个数。
而每行每列都是排序好的,并且第n行的最后1个元素小于第n+1行的第一个元素。


思路:
可以先定位元素的行进行定位,在找到列。
由于行列均已排序,行定位和列定位均可使用二分法进行搜索。




实现代码:






public class Solution {
    public bool SearchMatrix(int[,] matrix, int target) {
        
    var rowLen = matrix.GetLength(0);
	var colLen = matrix.GetLength(1);
	
	// first , locate the target in which row
	int? rowIndex = null;
	for(var i = 0;i < rowLen - 1; i++){
		if(target >= matrix[i,0] && target < matrix[i+1,0]){
			rowIndex = i;
			break;
		}
	}
	
	// try find in last row
	if(!rowIndex.HasValue){
		rowIndex = rowLen - 1;
	}
	
	
	// try find the target in matrix[row,0...n]
	var colArr = new int[colLen];
	for(var i = 0; i < colLen; i++ ){
		colArr[i] = matrix[rowIndex.Value, i];
	}
	
	var found = BSearch(colArr, target);
	return found.HasValue;
}


public int? BSearch(int[] arr, int n){
	for(var i =0 ;i < arr.Length; i++){
		var l = i;
		var r = arr.Length - 1;
		var m = arr.Length / 2;
		
		if(n == arr[l] || n == arr[r] || n == arr[m]){
			return n;
		}
		
		if(n > arr[m]){
			l = m;
		}
		else {
			r = m;
		}
	}
	
	return null;
}
}


相关文章:

  • LeetCode -- Sort Colors
  • 理解HTTP消息头
  • LeetCode -- Convert SortedList To BST
  • HTTP协议返回状态码表
  • LeetCode -- Insert Interval
  • 推荐WPF的好书
  • LeetCode -- Longest Valid Parentheses
  • 利用Intel博锐技术解决桌面管理难题
  • LeetCode -- Permutations
  • LeetCode -- Construct Binary Tree from Inorder and Postorder Traversal
  • 王小云:十年破译五部顶级密码
  • LeetCode -- Factorial Trailing Zeroes
  • LeetCode -- Gas Station
  • 山东大学王小云教授成功破解MD5
  • LeetCode -- Implement Trie (Prefix Tree)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • ES6 ...操作符
  • maya建模与骨骼动画快速实现人工鱼
  • React Native移动开发实战-3-实现页面间的数据传递
  • windows下mongoDB的环境配置
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 电商搜索引擎的架构设计和性能优化
  • 将回调地狱按在地上摩擦的Promise
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 问题之ssh中Host key verification failed的解决
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • NLPIR智能语义技术让大数据挖掘更简单
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (26)4.7 字符函数和字符串函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (力扣)1314.矩阵区域和
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • .form文件_SSM框架文件上传篇
  • .net Application的目录
  • .NET delegate 委托 、 Event 事件
  • .Net Remoting常用部署结构
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net 应用中使用dot trace进行性能诊断
  • .net6+aspose.words导出word并转pdf
  • .net中调用windows performance记录性能信息
  • .net中我喜欢的两种验证码
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • [ 蓝桥杯Web真题 ]-布局切换
  • [1204 寻找子串位置] 解题报告
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [DevEpxress]GridControl 显示Gif动画
  • [LeeCode]-Divide Two Integers 不用乘除的除法运算