java
/*在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
* 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
*/
/*
从右上方开始,比他小的往左边找,比他大的往下找,但是不能break要用continue继续执行。不需要continue也是可以的。
*/
import java.util.*;
import java.lang.*;
//import static net.mindview.util.Print.*;
public class No1 {
public static void main(String[] args){
System.out.println("输入的层数是:");
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int array0[][]=new int[n][n];
System.out.println("输入数组:");
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
array0[i][j]=scan.nextInt();
}
System.out.println("输入的整数为:");
int n0=scan.nextInt();
boolean result=Find(n0,array0);
System.out.println(result);
}
public static boolean Find(int target, int [][] array){
int i,j;
int row=array.length;
int col=array[0].length;
for(i=0,j=col-1;(i<row)&&(j>=0);){
if(array[i][j]>target){
j--;
continue;
}else if(array[i][j]<target){
i++;
continue;
}else return true;
}
return false ;
}
}
python
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
for row in range(len(array)):
arr = array[row]
# 对于每一行(一维数组),在这个一维数组中查找target。
for index in range(len(array[0])):
if arr[index] == target:
return True
return False
对于数组的遍历都是这样子的,行的长度就是len(array)(即现在是一维的长度,如果要列的长度其实就是len(array[0],一个柜子里面的长度)。
python的方法2
# 主要思路:首先选取右上角的数字,如果该数字大于target,则该列全大于target,删除该列;
# 如果该数字小于小于target,则该列全小于target,删除该行。
found = False
row = len(array)
col = len(array[0])
if(row>0 and col>0):
i = 0
j = col - 1
while(i<row and j>=0):
if array[i][j] == target:
found = True
break
elif array[i][j] > target:
j -= 1
elif array[i][j] < target:
i += 1
return found