c判断数组是否为空_剑指offer编程题 1.二维数组中的查找
是的,没错,我开始看算法题了,虽然我之前的项目经验告诉我,前端基本用不到算法,哎,没办法,我妥协了。。。
今天开始扒剑指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.二维数组中的查找相关推荐
- 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 剑指offer刷题 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找 1. 问题描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一 ...
- 牛客网-剑指offer 第一题(二维数组中的查找)
//题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. /*第一种 将每一行 ...
- 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题
文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...
- JAVA剑指offer编程练习:二维数组中的查找(数组)
1.题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...
推荐阅读:宇宙条的工作总结:一年前还在面试找工作,一年后在面试找工作的学弟学妹们:第一次当面试官的经历分享小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合 ...
- 剑指offer 面试题3—二维数组中找数
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 基本思想: 首先选取数组 ...
- 剑指Offer - 面试题4. 二维数组中的查找(双指针)
1. 题目 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例 ...
- 剑指offer面试题[3]-二维数组的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 注:对于一个容器存储的 ...
- 剑指offer面试题04. 二维数组中的查找(Array)
题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路 ...
最新文章
- k8s 带你一步步 创建用户账号(User Account)
- 云安全与我们未来的网络息息相关……
- webstorm / intellij IDEA / phpstorm license server 激活链接 (过期留言更新)
- 文件上传下载—servlet API实现
- php面向对象编程代码怎么写,php面向对象编程(一)
- 运维常见问题及解决方法汇总(持续更新...)
- Spring学习总结(1)- IOC
- mysql _ 通配符_mysql查询中通配符的使用
- Python之协程、异步IO、redis缓存、rabbitMQ队列
- 2.这就是搜索引擎:核心技术详解 --- 网络爬虫
- python ray定时任务_python定时任务APScheduler
- python 拼音搜索中文_JS实现输入拼音搜索中文列表
- Servlet和Servlet容器概念
- java-日期操作总结
- 微信小程序前端服务外包
- 使用Python以UCI心脏病数据集为例,进行数据简单分析
- 【蓝桥杯】【python】数字三角形
- JAVA、PHP身份证、统一社会信用代码算法解析验证
- 无人驾驶出租车车队长沙惊艳亮相,BIE保驾护航
- raise TypeError(f‘Object of type {o.__class__.__name__} ‘ TypeError: Object of type bytes is not