`
OpenMind
  • 浏览: 177244 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

二分搜索专题2-在有序二维数组中搜索一个元素

阅读更多
1,设二维数组p的每行每列都按照下标递增的顺序递增。
用数学语言描述如下:p满足
(1),对任意的x1,x2,y,如果x1<x2,则p(x1,y)<p(x2,y);
(2),对任意的x,y1,y2, 如果y1<y2,则p(x,y1)<p(x,y2);
2,问题:
给定满足1的数组p和一个整数k,求是否存在x0,y0使得p(x0,y0)=k?
3,算法分析:
(1),穷举法,遍历二维数组,复杂度O(n*n),这个方法的代码我就不写了。
(2),二分搜索,复杂度为O(n*lgn),遍历每一行,每一列采用二分搜索。
	//n*O(lgn)
	public static Point search(int[][] p, int k) {
		for (int i = 0; i < p.length; i++) {
			int j = bSearch(p[i], 0, p[i].length, k);
			if (j > 0) {
				return new Point(i, j);
			}
		}
		return null;
	}
	/**
	 * 用二分算法搜索递增数组X下标从s到e区间的值为t的元素的下标
	 */
	public static int bSearch(int[] X, int s, int e, int t) {
		while (s <= e) {
			int m = (s + e) / 2;
			if (X[m] == t) {
				return m;
			} else if (X[m] > t) {
				e = m - 1;
			} else {
				s = m + 1;
			}
		}
		return -1;
	}
	static class Point {
		int x;
		int y;

		public Point(int x, int y) {
			super();
			this.x = x;
			this.y = y;
		}

	}


我猜想,应该存在O(lgn*lgn)的算法,暂时没有想到。
分享到:
评论

相关推荐

    Python实现二维有序数组查找的方法

    题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 这题目属于比较简单但又很不...

    计算机二级公共基础知识

    例如,在一维数组[21,46,24,99,57,77,86]中,查找数据元素99,首先从第1个元素21开始进行比较,比较结果与要查找的数据不相等,接着与第2个元素46进行比较,以此类推,当进行到与第4个元素比较时,它们相等,...

    [详细完整版]数据结构].doc

    数据结构 一、编程题(请在以下题目中任选2题作答,每题30分,共60分) 1) 程序编写题 对于二维整数数组A[m][n],对下列三种情况,分别编写相应的函数。 1. 求数组所有边缘元素的数值和。 int sum1(int A[M][N],int ...

    leetcode矩阵旋转任意角度-Algorithm:算法

    leetcode矩阵旋转任意角度 数据结构 一. 线性表 1. 数组 数组具有随机访问特性,灵活使用数组的...基本二分查找:在有序数组中查找某个元素target的位置 查找目标元素的插入位置 查找目标元素第一次出现的位置 查找目标

    上海电机学院C语言实训答案

    (10)编写一个程序实现如下功能:调用名为tj的函数,求一个二维数组中正数、负数的代数和,以及零的个数。 (11)编写一个程序实现如下功能:调用一个名为gm的函数,该函数实现简单的加密。加密方法如下:先定义...

    leetcode答案-LeetCode:LeetCode上一些题的答案,虽然可能不是最优的答案,但是已经通过测试用例

    leetcode 答案 LeetCode ...搜索二维矩阵 中等 75 颜色分类 中等 77 组合 中等 78 子集 中等 83 删除排序链表中的重复元素 简单 94 二叉树的中序遍历 中等 98 验证二叉搜索树 中等 100 相同的树 简单 10

    leetcode中国-LeetCode:力扣合集

    查找有序数组中元素的首尾位置 1-是 35. 搜索插入位置 1-是 658. 找出 K 个最近的元素 1-否 33. 在旋转排序数组中搜索 1-否 81. 在旋转排序数组中搜索 II 1-否 153. 在旋转排序数组中求最小值 154. 在旋转排序数组中...

    (全)传智播客PHP就业班视频完整课程

    9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程...

    数据结构(C++)有关练习题

    内容及步骤: 1、 设有一个线性表(e0,e1,e2,e3,…,en-2,en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原地址内容置换为(en-1,en-2,…,e3,...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程...

    LeetCode判断字符串是否循环-shouzimu:leetcode和算法

    二维数组 Medium √ 7 整数反转 数组 Easy √ 12 整数反转 字符串 Medium √ 13 罗马数字转整数 散列表 Easy √ 15 三数之和 散列表 Medium √ 17 电话号码的字母组合 回溯法 Medium √ 19 删除链表的倒数第N个节点 ...

    史上最全传智播客PHP就业班视频课,8月份视频

    9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程...

    gasstationleetcode-binary-search:二分查找

    搜索已排序的二维数组 搜索未知大小 固定点 排序数组中的单个元素 等差数列中缺少数字 缺少元素 有效的山数组 山谷的顶峰 在 Mountain Array 中查找 峰元素 在旋转数组中找到最小值 在旋转数组中搜索 平方根 有效的...

    shuzu_数组_

    本程序对对给定的一维数组进行求最大值、最小值、和、平均值、排序、二分查找、有序插入等操作,而且可以从文本文件中读取有效数据进行处理。

    IOI国家集训队论文集1999-2019

    杨 俊 -《二分策略在信息学竞赛中的应用》 张伟达 -《用改进算法的思想解决规模维数增大的问题》 黄 刚 -《数据结构的联合》 杨 弋 -《从“小H的小屋”的解法谈算法的优化》 朱晨光 -《浅析倍增思想在信息学竞赛...

    leetcode双人赛-ShYy_Jianzhi:PersonalJianzhi_Offerrepositorywithsolutions,n

    二分搜索应用在有序二维数组中(重点) 从array[n - 1][0]开始搜索 大于则i--,小于则j++。搜到即true;未搜到则false。 时间复杂度 O(n + m) JZ2 替换空格 请实现一个函数,将一个字符串中的每个空格替换成“ ”。...

    程序设计基础答案

    A) 定义了一个名为a的一维数组 B) a数组有3个元素 C) a数组的下标为1~3 D)数组中的每个元素是整型 6.若a和b均是整型变量并已正确赋值,正确的switch语句是( )。 A) switch(a+b); B) switch( a+b*3.0 ...

    高校数据结构期末考题库

    4、二维数组是其数组元素为线性表的线性表。( ) 5、每种数据结构都应具备三种基本运算:插入、删除和搜索。( ) 6、数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运算三个 方面。( ) 7、...

Global site tag (gtag.js) - Google Analytics