剑指offer编程题

是的,没错,我开始看算法题了,虽然我之前的项目经验告诉我,前端基本用不到算法,哎,没办法,我妥协了。。。

今天开始扒剑指offer第一题,接下来,进入正题!

题目描述:

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M。

c++解法

## 思路

1、我先设初始值val 为右上角元素

2、接下来进行二分操作:

3、如果val == target,直接返回

4、如果 target > val, 说明target在更大的位置,val左边的元素显然都是 < val,间接 < target ,说明第 0 行都是无效的,所以val下移一行。

5、如果 target< val, 说明target在更小的位置,val下边的元素显然都是 > val,间接 > tar,说明第 5 列都是无效的,所以val左移一列

6、继续步骤2

## 代码

class Solution {

public:

bool Find(int target, vector > array) {

// 判断数组是否为空

int m = array.size();

if (m == 0) return false;

int n = array[0].size();

if (n == 0) return false;

int r = 0, c = n-1; // 右上角元素

while (r=0) {

if (target == array[r][c]) {

return true;

}

else if (target > array[r][c]) {

++r;

}

else {

--c;

}

}

return false;

}

};

## 复杂度分析

时间复杂度:O(m+n) ,其中m为行数,n为列数,最坏情况下,需要遍历m+n次。

空间复杂度:O(1)

Java解法

## 思路

利用该二维数组的性质:

每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

改变个说法,即对于左下角的值 m,m 是该行最小的数,是该列最大的数

每次将 m 和目标值 target 比较:

1.当 m < target,由于 m 已经是该列最大的元素,想要更大只有从列考虑,**列的取值+1**

2.当 m > target,由于 m 已经是该行最小的元素,想要更小只有从行考虑,**行的取值-1**

3.当 m = target,找到该值,返回 true

用某行最小或某列最大与 target 比较,每次可剔除一整行或一整列

## 代码

public class Solution {

public boolean Find(int target, int [][] array) {

int rows = array.length;

if(rows == 0){

return false;

}

int cols = array[0].length;

if(cols == 0){

return false;

}

// 左下

int row = rows-1;

int col = 0;

while(row>=0 && col

if(array[row][col] < target){

col++;

}else if(array[row][col] > target){

row--;

}else{

return true;

}

}

return false;

}

}

## 复杂度分析

时间复杂度:O(m+n) ,其中m为行数,n为列数,最坏情况下,需要遍历m+n次。

空间复杂度:O(1)

END岁月静好扫码加我为好友

c判断数组是否为空_剑指offer编程题 1.二维数组中的查找相关推荐

  1. 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  2. 剑指offer刷题 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找 1. 问题描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一 ...

  3. 牛客网-剑指offer 第一题(二维数组中的查找)

    //题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. /*第一种 将每一行 ...

  4. 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题

    文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...

  5. JAVA剑指offer编程练习:二维数组中的查找(数组)

    1.题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  6. java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...

    推荐阅读:宇宙条的工作总结:一年前还在面试找工作,一年后在面试找工作的学弟学妹们:第一次当面试官的经历分享小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合 ...

  7. 剑指offer 面试题3—二维数组中找数

    题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 基本思想: 首先选取数组 ...

  8. 剑指Offer - 面试题4. 二维数组中的查找(双指针)

    1. 题目 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例 ...

  9. 剑指offer面试题[3]-二维数组的查找

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 注:对于一个容器存储的 ...

  10. 剑指offer面试题04. 二维数组中的查找(Array)

    题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路 ...

最新文章

  1. k8s 带你一步步 创建用户账号(User Account)
  2. 云安全与我们未来的网络息息相关……
  3. webstorm / intellij IDEA / phpstorm license server 激活链接 (过期留言更新)
  4. 文件上传下载—servlet API实现
  5. php面向对象编程代码怎么写,php面向对象编程(一)
  6. 运维常见问题及解决方法汇总(持续更新...)
  7. Spring学习总结(1)- IOC
  8. mysql _ 通配符_mysql查询中通配符的使用
  9. Python之协程、异步IO、redis缓存、rabbitMQ队列
  10. 2.这就是搜索引擎:核心技术详解 --- 网络爬虫
  11. python ray定时任务_python定时任务APScheduler
  12. python 拼音搜索中文_JS实现输入拼音搜索中文列表
  13. Servlet和Servlet容器概念
  14. java-日期操作总结
  15. 微信小程序前端服务外包
  16. 使用Python以UCI心脏病数据集为例,进行数据简单分析
  17. 【蓝桥杯】【python】数字三角形
  18. JAVA、PHP身份证、统一社会信用代码算法解析验证
  19. 无人驾驶出租车车队长沙惊艳亮相,BIE保驾护航
  20. raise TypeError(f‘Object of type {o.__class__.__name__} ‘ TypeError: Object of type bytes is not

热门文章

  1. 介绍一下和AspNetPager结合的不错的分页方案
  2. 非Json字符串转map对象
  3. zookeeper leader选举过程
  4. linux -初步认识之软件安装
  5. SQL Server 用SSMS查看依赖关系有时候不准确,改用代码查
  6. rbac yii 1
  7. 在pcDuino上安装OpenJFX
  8. ADSL拨号网络环境下实时视频广播的完美实现
  9. 25 张图,一万字,拆解 Linux 网络包发送过程
  10. linux内核分析与应用 -- 并发(下)