首页 > 其他分享 >《剑指Offer》-4-二维数组中查找/力扣-240-搜索二维数组Ⅱ

《剑指Offer》-4-二维数组中查找/力扣-240-搜索二维数组Ⅱ

时间:2023-02-06 14:45:56浏览次数:41  
标签:false matrix Offer int 二维 数组 return

从最后一列的第一个数字开始比较,依次倒数第二列第一个数字、倒数第三列...
找到第一个 <= target 的数字,这样可以将范围缩小到一列
然后用二分查找快速判断目标元素有没有

好吧为了方便我还是横着来

	bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
		int m = matrix.size();
		if (!m) return false;
		int n = matrix[0].size();
		if (!n) return false;
		for (int i =m - 1; i >= 0; i--) {
			if (matrix[i][0] <= target) {
				int left = 0, right = n - 1;
				while (left <= right) {
					int mid = (left + right) / 2;
					if (matrix[i][mid] == target) return true;
					else if (matrix[i][mid] > target) right = mid - 1;
					else left = mid + 1;
				}

			}
		}
		return false;
	}

这个非空检查看起来确实很不好看,但是我也不知道为什么要给这么个测试用例,一下子也没想到更优雅的写法
然后空间和时间效率都不算高

标签:false,matrix,Offer,int,二维,数组,return
From: https://www.cnblogs.com/yaocy/p/17095338.html

相关文章

  • 数组封装新方法
    //查找数组中符合条件的元素Array.prototype.where=function(condition){varret=[];for(vari=0;i<this.length;i++){if(condition(this[i])){ret.......
  • 《剑指Offer》-53-在排序数组中查找数字/力扣-34
    Ⅰ统计一个数字在排序数组中出现的次数 intsearch(vector<int>&nums,inttarget){ intcount=0; for(intnum:nums){ if(num==target)count++; ......
  • php去除数组中为0的元素的实例分析
    利用array_diff()函数来去除数组中为0的元素。该函数用于比较两个数组的值并返回差集,只需要使用一个包含“0”数组和原数组进行比较即可。语法格式“array_diff($arr,[0]......
  • 数组的定义
    publicclassDemo01{//数组是相同类型数据的有序集合//数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成//每一个数据称作一个数组元素,每......
  • 数组的声明创建
    publicclassDemo02{publicstaticvoidmain(String[]args){//数组是相同数据类型(数据类型可以为任何类型)的有序集合//数组也是对象。数组元素......
  • 反转数组
    publicclassDemo04{publicstaticvoidmain(String[]args){int[]arrays={1,2,3,4,5};print(reverse(arrays));}//反转数组public......
  • 找出数组中的数的最大值
    publicclassDemo03{publicstaticvoidmain(String[]args){int[]arrays={1,2,3,4,5,6};for(inti=0;i<arrays.length;i++){......
  • 多维数组
    publicclassDemo05{//多维数组publicstaticvoidmain(String[]args){int[][]arrays={{1,2},{3,4},{5,6},{7,8},{9,10}};//定义数组方法一......
  • 稀疏数组
    importjava.util.Arrays;publicclassDemo08{publicstaticvoidmain(String[]args){//1.创建一个二维数组11*110:没有棋子1:黑棋2:白棋......
  • 剑指offer——Day24 数学(中等)
    Day242023.2.6数学(中等)剑指Offer14-Ⅰ.剪绳子自己实现就是简单地把给的数n尽可能平均分为m份(m是for(m=2;m<n;m++)),然后再比较每个m的乘积结果,最后再取最大值代码......