自己最近正好有空,因此开始了刷题系列,牛客网上的剑指offer题目。今天记录一个比较有思想的题目。因为这些都是算法题目,如果去用穷举蒙混过关就没意思了,因此尽量找比较优化的算法。我这里用python来解答。
最近正好也是有空,因此开始了刷题系列,牛客网上的剑指offer题目。今天记录一个比较有思想的题目。因为这些都是算法题目,如果去用穷举蒙混过关就没意思了,因此尽量找比较优化的算法。我这里用python来解答。
题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
思路一:
因为数组的有序性,从左到右从上到下递增,利用这一个规律,选取左下角的数为基点,如果目标数大于该数,那么目标肯定在基点的右边,所以 **column + 1 **; 如果目标小于基点数,那么 **row - 1 **。
逻辑是这样,每移动一次,都会以目前所在的点为基点,因此会排除一行或者一列,这种复杂度就会比较低了。‘
代码
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
hang = len(array)
lie = len(array[0])
i = hang - 1
j = 0
result = False
while(i>=0 and j<lie):
if target < array[i][j]:
i = i - 1
elif target > array[i][j]:
j = j + 1
elif target == array[i][j]:
result = True
return result
return result思路二:
遍历每一行用二分查找法,这个代码还没写,所以明天补上,这种方法比较通俗易懂。