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

1、python

a、使用内值函数 for target in array[i],逐行遍历

 # -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        t='true'
        f='false'
        for i in range(len(array)):
            if target in array[i]:
                return t
        return f
while True:
    try:
        sin=list(eval(raw_input()))
        s=Solution()
        #print(sin)
        target=sin[0]
        array=sin[1]
        print(s.Find(target,array))
    except:
        break
                  

b、如果不使用 if target in array[i],思路有两条:

思路1、利用二维列表的大小顺序,从左下(右上)角开使逐行判断,若比左下角的数大,则向上移动一行再进行判断;若比左下角数据小,则向右移动,进行判断,有相等值则返回1,判断出更大的值则返回0 ,判断完一行,返回0

思路2:、逐行遍历,行内二分法查找

注意,在用python时,无法直接获取到二维列表的 维度,需要转换为矩阵,np.array(list_).shape()


思路1 代码
(m,n)=np.array(array).shape()
    print(m,n)
    i=0
    for j in range(0,m):
        if array[m-j,0]==target:
            return 1
        elif array[m-j,0]<target:
            for i in range(0,n):
                if array[m-j,i]==target:
                    return 1
                elif array[m-j,i]>target:
                    return 0        
# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        t='true'
        f='false'
        m=len(array)
        n=len(array[0])
        for i in range(m):
            for j in range(n):
                if array[m-i-1][j]>target:
                        break
                elif array[m-i-1][j]<target:
                    if j==(n-1):
                        return f
                    else:
                        continue
                elif array[m-i-1][j]==target:
                    return t
        return f
                
while True:
    try:
        sin=list(eval(raw_input()))
        s=Solution()
        #print(sin)
        target=sin[0]
        array=sin[1]
        print(s.Find(target,array))
    except:
        break
                     

思路2 代码


```python
# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        t='true'
        f='false'
        for i in range(len(array)):#逐行遍历
            l=0
            h=len(array[0])-1#列数
            while l<=h:
                mid=(l+h)/2
                if array[i][mid]<target :
                    l=mid+1
                elif array[i][mid]>target :
                    h=mid-1
                else:
                    return t
        return f
                    
while True:
    try:
        sin=list(eval(raw_input()))
        s=Solution()
        #print(sin)
        target=sin[0]
        array=sin[1]
        print(s.Find(target,array))
    except:
        break
                     

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐