1 二维数组中的查找
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
利用二维数组由上到下,由左到右递增的规律,
那么选取右上角或者左下角的元素a[row][col]与target进行比较,
当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,
即col--;
当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,
即row++;
1 public class Solution { 2 public boolean Find(int target, int [][] array) { 3 int rows = 0; 4 int cols = array[0].length -1; 5 while(rows<=array.length-1 && cols>=0){ 6 if(target == array[rows][cols]) return true; 7 else if(target > array[rows][cols] ) rows ++ ; 8 else cols --; 9 10 } 11 return false; 12 } 13 }
public class Solution { public boolean Find(int target, int [][] a) { int row = 0; int col = a[0].length-1; while(true){ if(row>=a.length||col<0) return false; if(target==a[row][col]) return true; else if(target<a[row][col]) col--; else row++; } } }
更新 20180303
1 # -*- coding:utf-8 -*- 2 class Solution: 3 # array 二维列表 4 def Find(self, target, a): 5 # write code here 6 rows = len(a) 7 cols = len(a[0]) 8 i = 0 9 j=cols - 1 10 while i < rows and j >= 0: 11 if(a[i][j] > target): 12 j -= 1 13 elif(a[i][j] < target): 14 i += 1 15 else: 16 return True 17 return False 18