剑指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; } }
相关文章推荐
- 九度题目1372:最大子向量和(连续子数组的最大和) 剑指offer
- 《剑指Offer》题目——斐波拉契数列
- 《剑指Offer》题目:链表中倒数第k个结点
- 剑指offer面试题目:第一个只出现一次的字符
- fibonacci数列的题目——剑指Offer
- 《剑指Offer》题目——从尾到头打印链表
- 《剑指Offer》题目:合并两个排序的链表
- 剑指offer重要题目整理总结
- 剑指offer--找规律题目(斐波那契数列、跳台阶)
- 剑指Offer题目:字符串的排列
- 剑指Offer题目JAVA版思路与代码(六)
- 剑指offer 面试题三 题目二
- 剑指offer--DP类题目汇总
- 又通过一道题目,替换字符串 —— 剑指Offer
- 《剑指Offer》题目——位运算
- 剑指offer-题目1389:变态跳台阶(2014.1.5)
- 《剑指Offer》题目——二维数组中的查找
- 《剑指Offer》题目:树的子结构
- 剑指offer面试题目:和为 s 的两个数字
- 剑指offer重点复习题目