Saddleback Search

从leetcode看到,具体可见链接
下面是自己的理解和翻译。

设有一待查找的数x和一个二维数组b[0..m-1, 0..n-1](均为整数),每行和每列都是非降序(等于升序?),例子如下,此时m=4,n=4:

这里的x假设一定存在于b中,该算法就是从数组b中找到x的位置,因此有条件:
Q: x 存在于b[0..m-1, 0..n-1]中
该算法将结果存于变量h和k中,即:
R: x=b[h,k].

//以下是思考过程(或者废话,可跳过):
首先需要一个循环或递归过程,这里选择循环,然后需要一个循环不变量,这个循环不变量产生于R和Q,为了得出不变量,注意到R可以写成和Q一样的形式,即:
R: x存在于b[h..h,k..k]
Q是说x在一个大的范围内,R是说x在一个小的范围内,也许这个循环不变量P应该说x在一个范围内。重新按R的格式写这个不变量,并且用两个新的变量表示范围:
不变量P: x存在于b[h..i, j..k](这里有意思了,这里潜在的意思是行是从右往左找,列是从上往下找)
于是这个算法就非常简单了,它在最差的情况下运行时间为O(m+n),需要注意和利用的是一开始的条件,该数组,每行和每列都是非降序,即已经排好序了。
//思考过程完毕(废话完毕)

该算法简而言之是这样的:
1.从右上角开始找,即从b[0,n-1]开始找
【注:h,k=0,n-1, P: x存在于b[h..m-1, 0..k]中】
2.如果x大于b[h,k],那么h=h+1
3.如果x小于b[h,k],那么k=k-1
4.如果x匹配,那么返回h和k的值,即为所要查找的位置

注:以上算法并没有考虑x有重复多个值的情况或者x不存在的情况,仅限于x存在于b并且找到一个下标即可。

附leetcode 240 Search a 2D Matrix II code:

python:

class Solution(object):def searchMatrix(self, matrix, target):""":type matrix: List[List[int]]:type target: int:rtype: bool"""if not len(matrix) or not len(matrix[0]): return Falsen,m,c=0,len(matrix[0])-1,len(matrix)while(n<c and m>=0):if matrix[n][m]>target: m-=1elif matrix[n][m]<target: n+=1else: return Truereturn False

C++:

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if(matrix.size()==0) return false;int n=0,m=matrix[0].size()-1,c=matrix.size();while(n<c && m>=0){if(matrix[n][m]>target) m-=1;else if(matrix[n][m]<target) n+=1;else return true;}return false;}
};

纪念第一篇博客诞生撒花~~~~

Saddleback Search相关推荐

  1. C++Saddleback search鞍背搜索的实现算法(附完整源码)

    C++Saddleback search鞍背搜索的实现算法 C++Saddleback search鞍背搜索的实现算法完整源码(定义,实现,main函数测试) C++Saddleback search ...

  2. C和C++算法完整教程专栏完整目录

    C和C++算法完整教程专栏完整目录 专栏说明如下 完整专栏目录如下 专栏说明如下 内容:C和C++算法完整教程 数量:680篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加 ...

  3. 《Python程序设计》python常用的格式转换

    #字典 tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} tinydict['Age'] = 8 # 更新 tinydict['Schoo ...

  4. 【printf函数】vprintf使用参数列表(va_list)传递参数

    [二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇 格式化输出函数 printf函数族功能介绍 printf参数 type(类型) flags(标志) number(宽度) precision( ...

  5. python中的match和search的区别

    对比 match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]): 这个方法将从string的pos下标处起尝试匹配patt ...

  6. Python中re的match、search、findall、finditer区别正则

    20210728 search 得到索引范围 原文地址: http://blog.csdn.net/djskl/article/details/44357389 这四个方法是从某个字符串中寻找特定子串 ...

  7. Beam Search

    Q: 什么是Beam Search? 它在NLP中的什么场景里会⽤到? 传统的广度优先策略能够找到最优的路径,但是在搜索空间非常大的情况下,内存占用是指数级增长,很容易造成内存溢出,因此提出了beam ...

  8. python 正则表达式 re.search() 的使用

    1 re.search() 的作用: re.search会匹配整个字符串,并返回第一个成功的匹配.如果匹配失败,则返回None 从源码里面可以看到re.search()方法里面有3个参数 patter ...

  9. leetcode:Search in Rotated Sorted Array

    题目要求: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...

最新文章

  1. SQL SERVER 2000写存储过程出现列名无效的解决方法
  2. java中HashMap在多线程环境下引起CPU100%的问题解决
  3. 特殊权限控制之SUID、SGID、Sticky及facl
  4. 「后端小伙伴来学前端了」Vuex进阶操作,让你的代码更加高效(简称如何学会偷懒 【手动狗头】)
  5. editorloop 占用_速度控制 部分重复 语言学习软件 Loopman
  6. 计算机硬盘出现过哪些问题,出现这几种征兆, 说明您的电脑机械硬盘可能就有问题了!...
  7. 【nginx】nginx 负载均衡
  8. 时间序列分析导论书摘:确定自回归过程的阶数
  9. php 通过file_get_contents获取其他页面的内容(以及模仿表单post提交)
  10. python 中的[::-1]和[:-1]
  11. 《遥感原理与应用》孙家抦版知识点总结(含简答题)——第一章
  12. 东芝服务器报错误代码维修,实战维修 东芝复印机故障维修详解
  13. 8款主流Scrum敏捷开发工具评测,建议先马后看!
  14. 如何讲网页保存为pdf文件
  15. 如迷的解谜者——Alan Turing
  16. QCC3040---芯片数据手册 ADK release data sheet
  17. 项目文档模板_用于启动项目文档的模板
  18. Python小工具:批量给视频加水印!
  19. 清华计算几何大作业(一):CG2017 PA1-1 Convex Hull (凸包)
  20. 操作系统中消费者与生产者的同步互斥问题

热门文章

  1. 达梦数据库迁移数据失败,错误码:6002,消息校验异常
  2. 笔记本硬盘导入文件失败怎么恢复
  3. postgresql 客户端导入csv文件命令格式
  4. 输入一个用户名,点击登录按钮,如果输入tom,提示“已存在“,否则提示“欢迎使用“
  5. 全国软考中级软件设计师 学习笔记-软件工程部分
  6. PDF 压缩常用方法比较
  7. 二刷模集网课的盲区汇总
  8. 红蓝对抗中的攻击思路
  9. 生态学笔记:利用Rstudio V.PhyloMaker包构建系统发生树
  10. 基于verilog的火焰检测系统的FPGA实现