算法第二周作业01

来源:互联网 发布:sqllite接受数据 编辑:程序博客网 时间:2024/06/06 19:16

Description

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

Solutions

对于左上角的元素array[i][j] (其中i=0; j=array[0].length),它下方的数值都比它大(就是说它所在列中是最大的),它左方的数值都比它小(就是说它所在行是最大的)。
       首先将目标整数与左上角的元素对比,如果相等,那么它就是答案;  如果目标整数大于左上角的元素,那么目标整数大于它一整行的数值,因此可以排除所在行,即i++;   如果目标整数小于左上角的元素,那么目标整数小于它一整列的数值,因此可以排除所在列,即j--;
重复上述过程,直到i==array.length或者j==-1; 最后由于找不到相等的,返回false

Code

public static boolean Find(int target, int[][] array) {if(array == null || array.length == 0 || array[0].length == 0 || array[0][0] > target){return false;}// 定位左上角元素int i=0;int j=array[0].length - 1;for(; i< array.length && j >= 0;){if(target == array[i][j]){return true;} else if(target < array[i][j]){// 放弃所在列j--;} else if(target > array[i][j]){// 放弃所在行i++;}}return false;}





0 0