ACM_二维数组的查找
二维数组的查找
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
给定一个n*m的二维数组,保证a[i][j] < a[i+1][j],a[i][j]< a[i][j+1](其中0≤i< n-1,0≤j< m-1);
接下来有q个询问,每个询问包含一个数字num,查找num是否包含在该二维数组里面。
Input:
输入包含多组测试数据,对于每组数据,首先输入两个整数n,m,(1≤n,m≤).接下来输入n*m个数a[i][j](0≤a[i][j]≤10^9);接下来有q(1≤q≤1000)个询问每个询问包含一个数字num。
Output:
对于每组数据,对于每个询问如果num在二维数组里,输出Yes,否则输出No。
Sample Input:
4 3
1 2 8
2 4 9
4 7 10
6 8 11
3
5
4
10
Sample Output:
No
Yes
Yes
解题思路:二维数组的查找,题目中给出的矩阵最大为10^3*10^3,暴力查找显然会超时。但解题的关键在于标红色的条件,即每一行是升序,每一列也是升序,所以根据这个特点,查找的起始点应从右上角开始,向左边和下边进行扫描比较,这样可以节省很多时间。①显然当a[i][j]>num时,说明当前行num可能在当前行,于是j--向左扫描;②当a[i][j]<num时,说明当前行所在列的值比较小,于是i++进入下一行进行比较,③最后相等时,只需做一个标记看是否矩阵中存在这个元素即可。这里可能对②这种情况会有疑问,我们简单拿3*3矩阵举个栗子:
3 6 -- 11
|
4 7 12
|
5 8 13
如果我们要查找元素9是否在矩阵中,首先11>9,于是--j,然后6<9,于是++i,解决疑问就在这里,因为11所在列是升序,即11<12,所以当num>a[i][j](9>6)++i之后,即现在第二行所在列(比如:12)之后肯定比num大,所以不用去比较剩下的列元素。当9与8比较完之后,由于9>8,所以++i就导致越界,于是退出循环,表示矩阵中没有9这个元素。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[][],n,m,q,num;bool flag;//标记是否找到
int main()
{
while(cin>>n>>m){
for(int i=;i<n;++i)
for(int j=;j<m;++j)
cin>>a[i][j];
cin>>q;
while(q--){
cin>>num;flag=false;
for(int i=,j=m-;!flag && i<n && j>=;){
if(a[i][j]==num)flag=true;
else if(a[i][j]<num)++i;
else --j;
}
if(flag)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return ;
}
ACM_二维数组的查找的更多相关文章
- 剑指Offer01之二维数组中查找目标数
剑指Offer之二维数组中查找目标数 题目描述 在一个二维数组中(每个一维数组的长度相等),每一行都是从左到右递增的顺序排序,每一列都是从上到下递增的顺序排序,输入这样一个二维数组和一个整数,判断 ...
- 剑指offer:2.二维数组的查找(Java版)
备注:本文参照<剑指offer第二版> 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, 输入这样的一个二维数组和一个整数 ...
- 剑指offer(1)二维数组的查找
限制今天起开始也刷剑指offer啦,一步一步来. 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数, ...
- 二维数组的查找(JAVA)
二维数组查找 解题思路:找到该二维数组的特殊点,易知该二维数组左下角的那个点很特殊.从这个点往右看,数值都在变大:而往上看,数值都在变小.所以 我们可以将这个点的索引设为起点(i,j),当比目标数大时 ...
- 牛客网剑指offer 二维数组的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 解题思路 该题有很多种 ...
- 递归分治算法之二维数组二分查找(Java版本)
[java] /** * 递归分治算法学习之二维二分查找 * @author Sking 问题描述: 存在一个二维数组T[m][n],每一行元素从左到右递增, 每一列元素从上到下递增,现在需要查找元素 ...
- 剑指offer —— 二维数组的查找
1.问题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 2.思路:只看题目本身 ...
- 剑指offer之 二维数组的查找
package Problem3; public class Find { /* * 题目描述:二维数组中的查找 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排 ...
- 剑指 offer set 1 二维数组中查找
总结 1. 二维数组搜索题遇到两个了, 一个是 Leetcode 上 search in 2D matrix. 那道题比较简单, 因为下一行的所有元素大于上一行的. 这道题对二维矩阵的要求比较松, 起 ...
随机推荐
- Python进阶-打包程序为exe
操作系统:win7 x64 运行环境:Python3.5 安装PyInstaller 第一步:下载PyInstaller https://github.com/pyinstaller/pyinstal ...
- 【Codeforces 411A】Password Check
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 傻逼模拟题 [代码] import java.io.*; import java.util.*; public class Main { st ...
- java增强for循环中获取index
java增强for循环中获取index http://rensanning.iteye.com/blog/2003205
- hdu 2844 多重背包二进制优化
//http://www.cnblogs.com/devil-91/archive/2012/05/16/2502710.html #include<stdio.h> #define N ...
- 公众号开发 jsp中<a>问题
在开发微信公众号时,使用了jQuery mobile这个框架,但是在jsp页面中使用<a>发现点击跳转不成功,这就很奇怪了,网上搜索发现大家基本上用js来代替<a>跳转功能: ...
- 0213微信ZABBIX报警
简介 微信作为日常使用最频繁的工具,因此希望将微信接入zabbix报警. 微信企业号 1.申请微信企业号 申请后,请在“我的企业”页面下记录企业号的CorpID 2.添加通讯录 部门添加完成后,根据实 ...
- [poj1704]Georgia and Bob_博弈论
Georgia and Bob poj-1704 题目大意:题目链接 注释:略. 想法:我们从最后一个球开始,每两个凑成一对.如果有奇数个球,那就让第一个球和开始位置作为一对. 那么如果对手移动的是一 ...
- 洛谷—— P1339 [USACO09OCT]热浪Heat Wave
P1339 [USACO09OCT]热浪Heat Wave 题目描述 The good folks in Texas are having a heatwave this summer. Their ...
- 奇偶数对调,保持顺序 —— 剑指Offer
这道题目 https://www.nowcoder.net/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&t ...
- 1. PermCheck 桃花顺检验 Check whether array A is a permutation.
package com.code; import java.util.Arrays; public class Test04_2 { public static int solution(int[] ...