在一个二维数组中,行列都是递增,判断数组中是否含有输入的整数

来源:互联网 发布:ubuntu tensorflow安装 编辑:程序博客网 时间:2024/05/17 22:43

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

package com.jason.algorithm;public class ArrayAlgootithmPractice {public static void main(String[] args) {ArrayAlgootithmPractice arrayAlgootithmPractice = new ArrayAlgootithmPractice();int target = 5;int[][] arrays = { { 1, 2, 3, 4 }, { 2, 3, 4, 6 }, { 3, 4, 6, 7 } };System.out.println(arrayAlgootithmPractice.Find(target, arrays));System.out.println(arrayAlgootithmPractice.Find1(target, arrays));System.out.println(arrayAlgootithmPractice.Find2(target, arrays));}/* 利用每行最后一个元素最大的特性 */public boolean Find(int target, int[][] array) {boolean isFind = false;for (int i = 0, j = array[0].length - 1; !isFind && i < array.length&& j >= 0;) {System.out.println(" i =" + i + " j=" + j);if (array[i][j] == target) {isFind = true;break;} else if (array[i][j] > target) {j--;} else {i++;}}return isFind;}/* 直接遍历数组,没有用到条件 */public boolean Find1(int target, int[][] array) {boolean isFind = false;int columnLength = array[0].length;for (int i = 0; i < array.length; i++) {for (int j = 0; j < columnLength; j++) {if (target == array[i][j]) {isFind = true;break;}}}return isFind;}/* 遍历每行,每行用二分法查找 */public boolean Find2(int target, int[][] array) {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;}}

如果你有更好的实现方式,欢迎留言,大家一起学习,谢谢!

0 0