您的位置:首页 > Web前端

剑指Offer——题目1

2019-06-11 14:19 816 查看
版权声明:转载,引用,需附上原文的链接地址! https://blog.csdn.net/romantic_jie/article/details/91433108
[code]//日期:2019.6.11
//作者:刘烜杰
//功能:剑指offer题目训练 第一题
//=========================================================
//题目描述:
/*在一个二维数组中(每个一维数组的长度相同),
* 每一行都按照从左到右递增的顺序排序,
* 每一列都按照从上到下递增的顺序排序。
* 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
* */
//=========================================================
//较为理想的思路为:
//利用题目的特点,行列都是递增的
//从左下角开始遍历:
//如果,比target小,证明当前列全部比target小,列数右移
//如果,比target大,证明当前行全部比target大,行数上移
//不断的缩小其比较空间,直到找到,或者出界
//==========================================================
/*
* 时间复杂度:最差情况下:比较次数:2n-1 移动次数:2n-2
* 		故:O(n)
* 空间复杂度:没有使用额外的空间 O(1)
* */

package com.liuxuanjie;

import java.util.*;

public class Main {

//主函数,作为程序测试代码的入口
public static void main(String []args)
{
//随便输入一个二维数组进行测试
int [][] int_array = new int[5][5];

for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
int_array[i][j] = i + j;
}
}

Main main = new Main();
System.out.println(main.run(16,int_array));
}

public boolean run(int target,int [][]array)
{
if(array == null) return false;

int len = array.length;
int line = len - 1;
int rows = 0;

while(line >= 0 && rows <= len - 1)
{
if(array[line][rows] == target) return true;
else if(array[line][rows] > target) line--;
else if(array[line][rows] < target) rows++;
}

return false;
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: