劍指offer第二天之二維數組中的查找
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
java:
package offer;
public class Solution {
/*
data:2020516
author:魏振東
fun:在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,
每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,
判斷數組中是否含有該整數。
* */
public static boolean Find(int target, int [][] array) {
boolean found = false;
// 選取右上角的點
// 行
int row = 0;
// 列
int cols = array[0].length-1;
while(row<array.length&&cols>=0)
{
if(array[row][cols]==target)
{
found = true;
return found;
}
// 如果數組中的數大於target,則列向左移動
else if(array[row][cols]>target)
{
cols--;
}
// 如果數組中的數小於target,表示target可能在這列,則向下移動
else{
row++;
}
}
return found;
}
public static void main(String args[])
{
int [][] array =new int[][]{{1,2,8,9},{4,7,10,13}};
for(int i =0;i<array.length;i++){
for(int j =0;j<array[0].length;j++){
System.out.print(array[i][j]);
}
System.out.println();
}
System.out.println( Find(7,array));
}
}
python :
# -*- coding:utf-8 -*-
class Solution:
# array 二維列表
def Find(self, target, array):
# write code here
found = False
row = 0
cols = len(array[0]) - 1
while row < len(array) and cols >= 0:
if array[row][cols] == target:
found = True
break
elif array[row][cols]>target:
cols -= 1
else:
row += 1
return found
c++:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
bool found = false;
int row = 0;
int cols = array[0].size()-1;
while(row<array.size()&&cols>=0)
{
if(array[row][cols]==target)
{
found = true;
break;
}
else if(array[row][cols]>target)
{
cols--;
}
else
{
row++;
}
}
return found;
}
};