20190110-用笨办法找到二维矩阵的鞍点

1:找出一个多维数组的鞍点,即该元素在该行上最大,在该列上最小,也可能没有鞍点

a = [
    [1,2,3,4],
    [4,5,6,2],
    [7,0,5,2],
    [11,10,7,9]]

解题思路如下:

step1:先找出每行的最大值,及其index,输出最大值,即所在行和列作为要给list存如result列表中,函数写法如下:

def find_saddle_max_point(s):
    result =[]
    #用result存储每行最大值以及其index
    for i in range(len(s)):
        #遍历次数,即一共有多少个行,如例子中一共有4行,该值等于a的元素个数
        max =s[i][0]
#设定每行的最大值为第一个
        location =[]
#新建一个location列表来存储该值在外层的index和内层的index
        index=0
#设定最大值所在的列的index值为0
        for j in range(len(s[i])):
            #遍历每行的每个值
            if s[i][j]>max:
                max = s[i][j]
                index =j
#找出最大值以及最大值所在列,即j的值
        location.append(i)
        location.append(index)
#存入横向列表坐标和纵向坐标值
        result.append((max,location))
#将最大值及所在的location(包括横向坐标和纵向坐标)存如result中
    return result
print(find_saddle_max_point(a))

step2:找出二维矩阵每列最小值,函数写法同step1

def find_saddle_min_point(s):
    result =[]
    for i in range(len(s[0])):
        #遍历列的次数,如a有4列,列的遍历次数等于a的嵌套列表的长度
        min = s[0][i]
#设定最小值为每列第一个
        location=[]
        index=0
        for j in range(len(s)):
            #遍历每列的值
            if s[j][i]<min:
                min =s[j][i]
                index = j
        location.append(index)
        location.append(i)
#将每列的最小值所在的index存如location列表中
        result.append((min,location))
#将每列的最小值以及所在的location存如result中
    return result
print(find_saddle_min_point(a))

step3:遍历step1和step2生成的列表,如果有最大值和最小值重复,并且index一样,即2个列表中有重复元素则为二维数组的鞍点

#step3:如果最小值与最大值重复,并且其index一样,则为鞍点
def find_saddle(a):
    list1 = find_saddle_max_point(a)
    list2 = find_saddle_min_point(a)
    for i in list1:
        if i in list2:
            return i
    else:
        return False
print(find_saddle(a))

原文地址:https://www.cnblogs.com/hyj691001/p/10252327.html

时间: 2024-10-08 15:33:54

20190110-用笨办法找到二维矩阵的鞍点的相关文章

20140920百度笔试题一道之二维矩阵查找

题目: 有这样一个二维矩阵A[N][N],满足j < k时, 1)a[i][j] < a[i][k]; 2)a[j][i] < a[k][i](其实就数据从左上角到右下角纵横方向上都递减),给定一个数target,如何快速搜索是否在这个矩阵中,是的话输出二维坐标,否则输出Null:(不妨假设数据不重复) 比如  12  34  56  78  90  96 13  35  57  79  91  97 14  36  58  80  93  98 15  37  59  81  94  

【LeetCode-面试算法经典-Java实现】【074-Search a 2D Matrix(搜索二维矩阵)】

[074-Search a 2D Matrix(搜索二维矩阵)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers in each row are sorted from left to right. The first

搜索二维矩阵II

题目 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没有重复的整数. 解题 和判断一个数是否在这样的二维矩阵中一样,判断找到适合就结束了 这个题目有多个,找到一个的时候还要继续找,直到找完 public class Solution { /** * @param matrix: A list of lists of integers * @param: A number

九章算法面试题76 搜索二维矩阵

九章算法官网-原文网址 http://www.jiuzhang.com/problem/77/ 题目 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 1) 每行中的整数从左到右是排序的. 2) 每行的第一个数大于上一行的最后一个整数. 在线测试本题 http://www.lintcode.com/zh-cn/problem/search-a-2d-matrix/ 解答 这道题虽然看似矩阵问题,其实最终可以转换为一维数组,每一行按照顺序已经排好序了同时上一行末尾的元素比下

[Leetcode] search a 2d matrix 搜索二维矩阵

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer of the previous ro

[LeetCode] Search a 2D Matrix 搜索一个二维矩阵

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer of the previous ro

代码题(36)— 搜索二维矩阵

1.74.搜索二维矩阵 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5,返回 true. 给定 tar

LeetCode 240. 搜索二维矩阵 II (C#实现)——二分查找,分治法

问题:https://leetcode-cn.com/problems/search-a-2d-matrix-ii/ 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18,

Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II)

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5,返回 true. 给定 target = 20,返回