2019.4.27,周日,阴天or雾霾,前两天下完雨后,天真的很蓝啊,今天又,可能这个天才是北京的常态,今天又下了小雨,看看明天的天空,期待,有蓝天
之前刷了几道,忙别的事,断断续续,今天重新开始刷,雷打都不动,~~~~~~~~~~~~~
题目:
二维数组中(每个一维数组长度相同),每行数从左到右递增,每列从上到下递增;
写一个函数,输入上述二维数组和一个整数,判断数组中是否含有该整数;
步骤:
1、构建函数,可以初始化为指定数组 ,C实现,比较简单这里先不贴了
2、输入一整数,并查看该数组
参考:链接:https://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e
部分解释:
法1:
把每一行看成有序递增的数组,
利用二分查找,
通过遍历每一行得到答案,
时间复杂度是nlogn
法2:
来源:牛客网
利用二维数组由上到下,由左到右递增的规律,
那么选取右上角或者左下角的元素a[row][col]与target进行比较,
当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,即col--;
当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,即row++;
----------------------------------------------------------------------------------------
上面实现基于左下角查找方法,我实现以下右上角方法:
数组本身是有规律的,选择从数组那个角开始(左上,左下,右上,右下);
实现:
具体二维数组来帮助我们分析问题
A=[1,2,3,4,5
6,7,8,,9,10]
分析:i行j列;数组里右上角数表示为a[i][j](i-0,j=cols)
条件:while i<=rows and j>=0:
Target > a[i][j] ->向下一行移动即i+1
Target < a[i][j]-->向左一列移动即j-1
代码部分:
# 1find-array.py
import numpy as np
class Solution(object):
"""docstring for Solution"""
def Find(self, target, array):
#super(Solution, self)Find_()Findtarget,# array = atarget, array
# rows = len(array) - 1
# cols = len(array) - 1 #数的列
# print(cols)
rows=array.shape[0] - 1
cols=array.shape[1] - 1
# i = rows
# j = 0
i = 0
j = cols
while i<=rows and j>=0:
if target < array[i][j]:
j -=1
elif target>array[i][j]:
i +=1
else:
return True
return False
a = np.array([[1,2,3,4,5],[6,7,8,9,10]])
# print("row a:", a.row)
# print("cols a:", a.cols)
d=6
print("d=", d)
b=Solution()
c= b.Find(d, a)
print(c)