剑指Offer--我用JAVA做(二)
来源:互联网 发布:银行数据标准定义规范 编辑:程序博客网 时间:2024/06/03 17:54
/** * 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 *输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数。 输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字。 接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所示,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。*输出: 对应每个测试案例, 输出”Yes”代表在二维数组中找到了数字t。 输出”No”代表在二维数组中没有找到数字t。 * * @author zonebase@163.com */public class day02 {public static void main(String[] args) {int array[][] = { { 2,3,4 }, { 5,6,7 }, { 8,9,10 } };System.out.println(solution(array,6));System.out.println(solution(array,12));}/** *采用二分查找法,时间复杂度为O(max(m,n))。先将给定的值key与二维数组右上角的元素比较, *若相等,则返回true,若key小于它,则最后一列的元素肯定都大于key,此时可以删除掉最后一列, *而若key大于它,则第一行的元素肯定都小于key,此时可以删除掉第一行,依次向下比较,如果比较到了左下角的元素,还没有发现等于key的,则返回fasle。 *当然也可以从左下角开始找 */private static boolean solution(int[][] array,int key){if(array==null||array.length<1||array[0].length<1){return false;}int original_rows=array.length;int original_columns=array[0].length;int current_row = 0; int current_column = original_columns - 1; while (current_row < original_rows && current_column >= 0) { if (array[current_row][current_column] == key) { return true; } else if (array[current_row][current_column] > key) { // 列变小 current_column--; } else { // 行变大 current_row++; } } return false;}}
0 0
- 剑指Offer--我用JAVA做(二)
- 剑指Offer--我用JAVA做(一)
- 剑指Offer--我用JAVA做(三)
- 《剑指Offer》做题总结(二)
- 剑指offer(二)java
- 剑指offer(二十)之不用加减乘除做加法
- 剑指Offer笔记<JAVA版>(二)
- 剑指offer习题JAVA实现(二)
- 剑指offer 练习二(Java版)
- 【剑指offer-Java版】47不用加减乘除做加法
- 剑指offer:不用加减乘除做加法(java)
- [剑指Offer 47] 不用加减乘除做加法(Java)
- 剑指offer 二
- 剑指offer(二)
- 剑指offer前奏二
- 【剑指OFFER-二刷】
- 剑指offer(二)
- 剑指offer(二)
- OCX控件ID对应关系的梳理
- 这多年来我一直在钻研的技术
- 【OpenGL】纹理贴图实例-棋盘
- 面向对象的单片机编程
- apache+php服务器环境搭建
- 剑指Offer--我用JAVA做(二)
- 【C++】 C++标准模板库(十) 双向队列
- 20170106 学习支持向量机
- log4j的使用详细解析
- js发起轮询
- 性能测试应该怎么做?
- 【Get深一度】窗函数(window function)
- 年轻人的第一次追忆
- linq自数据库中读取数据,返回匿名类型对象,以供前端使用