当前位置: 首页 > news >正文

【持续跟新】剑指Offer_Java实现

【第一题 】二维数组中的查找

package sword_finger_offer;

import org.junit.jupiter.api.Test;

/**
 * 剑指offer习题一 二维数组中的查找
 * @ClassName: Code_00_topic01
 * @Description: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,
 * 每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组
 * 和一个整数,判断数组中是否含有该整数。
 * @author shundong.wu
 * @date 2019年2月19日
 *	
 */
public class Code_00_topic01 {
	/**
	 * 思路1: 二分查找每一行的数组  然后遍历列  
	 * 时间复杂度 O(nlogn)
	 * @param array 二位数组
	 * @param target 需要找的值
	 * @return
	 */
	@Test
	public boolean Find1(int[][] array,int target) {
		//外层的一维数组遍历
		for(int i=0;i<array.length;i++){
			//下面是二分
			int low=0;
			int high=array[i].length-1;
			while(low<=high){
				int mid=(low+high)/2;
				if(target>array[i][mid])
					low=mid+1;
				else if(target<array[i][mid])
					high=mid-1;
				else
					return true;
			}
		}
		return false;
	}

	/**
	 * 思路2: 首先矩阵是一个有规律的   
	 * 时间复杂度 O(M+N)
	 * 利用二维数组由上到下,由左到右递增的规律,
	 * 那么选取右上角或者左下角的元素a[row][col]与target进行比较,
	 * 当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,
	 * 即col--;
	 * 当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,
	 * 即row++
	 * @param array 二位数组
	 * @param target 需要找的值
	 * @return
	 */
	@Test
	public boolean Find2(int[][] array,int target) {
		int row = 0;//行
		int col =  array.length-1;//列
		//此处做越界处理  当行或者列越界 结束while循环
		while(row<=array.length-1&&col>=0){
			if(target==array[row][col])
				return true;
			else if(target>array[row][col])
				row++;
			else
				col--;
		}
		//若是遍历了整个矩阵 都没有 则返回false 结束该方法
		return false;
	}
}

  待续未完..

 

转载于:https://www.cnblogs.com/shundong106/p/10402422.html

相关文章:

  • js,jq发送短信倒计时
  • Ubuntu软件包管理命令全面集锦
  • 资深项目经理推荐的几款免费/开源项目管理工具
  • Linux上mysql修改密码
  • V4L2视频输入框架概述
  • 20171107--SQL变量,运算符,存储过程
  • 国内首例:飞步无人卡车携手中国邮政、德邦投入日常运营
  • 过了半年才写了篇博客,我心情也很悲伤啊,加班加到死,已经浑浑噩噩了
  • bootstrap 的 datetimepicker 结束时间大于开始时间
  • 设计模式之-代理模式
  • 理解MySQL——复制(Replication)
  • 重载与重写
  • jQuery动态生成元素无法绑定事件的解决办法
  • BZOJ3998:[TJOI2015]弦论(SAM)
  • tablelayout高度问题
  • 「译」Node.js Streams 基础
  • 0基础学习移动端适配
  • canvas 高仿 Apple Watch 表盘
  • CAP理论的例子讲解
  • exports和module.exports
  • gf框架之分页模块(五) - 自定义分页
  • gulp 教程
  • happypack两次报错的问题
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • MobX
  • Octave 入门
  • Quartz初级教程
  • React-flux杂记
  • Sass Day-01
  • 当SetTimeout遇到了字符串
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 前端js -- this指向总结。
  • 驱动程序原理
  • 优秀架构师必须掌握的架构思维
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)STM32单片机上位机
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)springboot教学评价 毕业设计 641310
  • (十六)串口UART
  • (一)Dubbo快速入门、介绍、使用
  • (转)Oracle存储过程编写经验和优化措施
  • .Family_物联网
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Remoting学习笔记(三)信道
  • .NET 表达式计算:Expression Evaluator
  • .net 受管制代码
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net与java建立WebService再互相调用
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2]十道算法题【Java实现】