网友:感谢华为救了我的下半生。

news2024/9/21 16:19:49

(关注数据结构和算法,了解更多新知识)

最近一位网友发视频称,华为Mate60 Pro帮他挡了子弹。视频配文:“一场意外,没有这个手机隔挡,下半生我可能就在轮椅上度过了!”视频中,手机摄像头右侧被击中,该网友还晒出了自己大腿中枪受伤的照片。

c16cd8a8075f47e9ee0ea7cbd559ae25.jpeg

aad8b54623c848bd0a73141a17134b6f.jpeg

8e195ad2a9622bd5be6c050a3c352ba1.jpeg

933c6bb93d575aa4b5c030e7fea594ff.png

在该视频的下面其中一位网友评论说:本以为是闹着玩的,直到看见了他的IP。该IP显示的是云南,应该是处于云南和果敢的交界处。

89b10e4b1f74d1c9d1d511e48fd7a84b.png

其他网友说:打中的应该是流弹,反弹后的子弹或者碎片,如果正面直接挡子弹,在加几台手机都不够。我觉得这个才是最真实的,应该是流弹擦伤,幸亏兜里装个手机挡了一下,要不然会更加严重,搞不好下半生就变成下半身了。

f02e1df8dd8bed5832e11ba63f6d4aa9.png

632b80bacdf5e2976e6ac8460829885c.png

--------------下面是今天的算法题--------------

我们来看一道华为的面试题,这题是LeetCode的第221题:最大正方形。一网友在华为的面试中遇到这题,我们来看下。

64cb845a72e8ec254c9017a15d16077f.png

问题描述

来源:LeetCode第221题

难度:中等

在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。

示例1:

af297ebfbf7a46b07c45b0d117b71fe2.jpeg

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]

输出:4

示例2:

eaf54e0d3f7ccae6debb43d4e2020322.jpeg

输入:matrix = [["0","1"],["1","0"]]

输出:1

  • m == matrix.length

  • n == matrix[i].length

  • 1 <= m, n <= 300

  • matrix[i][j] 为 '0' 或 '1'

问题分析

这题让计算最大正方形面积,只需要找到最大正方形的边长就可以计算面积了。

可以使用动态规划解决,定义二维数组dp[m][n],其中dp[i][j]表示在矩阵中以坐标[i,j]为右下角的最大正方形边长。如果想求dp[i][j],需要判断矩阵中matrix[i][j]的值。

1,如果matrix[i][j]是0就没法构成正方形,所以dp[i][j]=0。

2,如果matrix[i][j]是1,说明可以构成一个正方形,并且这个正方形的边长最小是1。

        2.1,如果求最大值,还需要判断他左上角的值dp[i-1][j-1],如果dp[i-1][j-1]是0,那么以坐标[i,j]为右下角的最大正方形边长就是1,如下图所示

76dfc28435d2a95f2d1182ee82fd845e.png

        2.2,如果左上角的值dp[i-1][j-1]不是0,那么以坐标[i,j]为右下角有可能可以构成一个更大的正方形。为啥说是有可能,因为如果要确定他能不能构成一个更大的正方形,还要往他的上边和左边找,看下下面的图。

16bbb6062fa3245b3a581624b72a9bef.png

有可能是下面这种情况,就是左边或者上边的某一个高度小于dp[i-1][j-1]的值,要想构成最大的正方形我们只能取最小的。

d9c44cd1106a70d9b1a2651641830a1b.png

也有可能是下面这种,就是左边和上边的高度都不小于dp[i-1][j-1]的值。

fbf01862f5629575ac2fe16b6e02a621.png

所以我们可以得出结论,如果matrix[i,j]是1,那么以他为右下角的最大正方形边长是min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1;

所以我们可以找出递推公式

如果matrix[i,j]为0,则dp[i][j]=0;

如果matrix[i,j]为1,则dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;

JAVA:

public int maximalSquare(char[][] matrix) {
    // 二维矩阵的宽和高
    int m = matrix.length;
    int n = matrix[0].length;
    int[][] dp = new int[m + 1][n + 1];
    int maxSide = 0;// 最大正方形的宽
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            if (matrix[i - 1][j - 1] == '1') {
                // 递推公式
                dp[i][j] = Math.min(dp[i - 1][j],
                        Math.min(dp[i - 1][j - 1], dp[i][j - 1])) + 1;
                // 记录最大的边长
                maxSide = Math.max(maxSide, dp[i][j]);
            }
        }
    }
    return maxSide * maxSide; // 返回正方形的面积
}

C++:

public:
    int maximalSquare(vector<vector<char>> &matrix) {
        // 二维矩阵的宽和高
        int m = matrix.size();
        int n = matrix[0].size();
        vector<vector<int>> dp(m + 1, vector(n + 1, 0));
        int maxSide = 0;// 最大正方形的宽
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (matrix[i - 1][j - 1] == '1') {
                    // 递推公式
                    dp[i][j] = min(dp[i - 1][j],
                                   min(dp[i - 1][j - 1], dp[i][j - 1])) + 1;
                    // 记录最大的边长
                    maxSide = max(maxSide, dp[i][j]);
                }
            }
        }
        return maxSide * maxSide; // 返回正方形的面积
    }

C:

#define min(a, b) (((a) < (b)) ? (a) : (b))
#define max(a, b) (((a) > (b)) ? (a) : (b))

int maximalSquare(char **matrix, int matrixSize, int *matrixColSize) {
    // 二维矩阵的宽和高
    int dp[matrixSize + 1][*matrixColSize + 1];
    memset(dp, 0, sizeof dp);
    int maxSide = 0;// 最大正方形的宽
    for (int i = 1; i <= matrixSize; i++) {
        for (int j = 1; j <= *matrixColSize; j++) {
            if (matrix[i - 1][j - 1] == '1') {
                // 递推公式
                dp[i][j] = min(dp[i - 1][j],
                               min(dp[i - 1][j - 1], dp[i][j - 1])) + 1;
                // 记录最大的边长
                maxSide = max(maxSide, dp[i][j]);
            }
        }
    }
    return maxSide * maxSide; // 返回正方形的面积
}

Python:

def maximalSquare(self, matrix: List[List[str]]) -> int:
    # 二维矩阵的宽和高
    m, n = len(matrix), len(matrix[0])
    dp = [[0] * (n + 1) for _ in range(m + 1)]
    maxSide = 0  # 最大正方形的宽
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if matrix[i - 1][j - 1] == '1':
                # 递推公式
                dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]) + 1
                # 记录最大的边长
                maxSide = max(maxSide, dp[i][j])
    return maxSide * maxSide  # 返回正方形的面积

45bdeebdba89bad7f7f88f3cac234aa7.gif

笔者简介

博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解700多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。

  • 我的新书《算法秘籍》出版了。

  • 公众号是怎么写出10万+的文章的。

  • 华为招数学博士的要求非常奇怪。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1441295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TS学习与实践

文章目录 学习资料TypeScript 介绍TypeScript 是什么&#xff1f;TypeScript 增加了什么&#xff1f;TypeScript 开发环境搭建 基本类型编译选项类声明属性属性修饰符getter 与 setter方法static 静态方法实例方法 构造函数继承 与 super抽象类接口interface 定义接口implement…

git flow与分支管理

git flow与分支管理 一、git flow是什么二、分支管理1、主分支Master2、开发分支Develop3、临时性分支功能分支预发布分支修补bug分支 三、分支管理最佳实践1、分支名义规划2、环境与分支3、分支图 四、git flow缺点 一、git flow是什么 Git 作为一个源码管理系统&#xff0c;…

SQL--事务

事务简介 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 就比如: 张三给李四转账1000块钱&#xff0c;张三银行账户…

适用于 Windows 的 6 款 iPhone 数据恢复软件

数据恢复 已经取得了长足的进步。从仅提供恢复数据的可能性到保证数据恢复&#xff0c;有许多适用于 Windows的第三方 iPhone 数据恢复软件。 大多数软件都是高级工具&#xff0c;但是提供了出色的数据恢复解决方案。从iPhone恢复数据非常简单。 只需将 iPhone 连接到您的计算…

蓝桥杯刷题day08——完全日期

1、题目描述 如果一个日期中年月日的各位数字之和是完全平方数&#xff0c;则称为一个完全日期。 例如&#xff1a;2021年6月5日的各位数字之和为20216516&#xff0c;而16是一个完全平方数&#xff0c;它是4的平方。所以2021年6月5日是一个完全日期。 请问&#xff0c;从200…

计算机毕业设计Python+django医院后勤服务系统flask

结合目前流行的 B/S架构&#xff0c;将医疗后勤服务管理的各个方面都集中到数据库中&#xff0c;以便于用户的需要。该平台在确保平台稳定的前提下&#xff0c;能够实现多功能模块的设计和应用。该平台由管理员功能模块,工作人员模块&#xff0c;患者模块&#xff0c;患者家属模…

git 使用 (备查)

git忽略清单 添加忽略清单 SSH免登录 ssh协议可以实现免登录操作&#xff0c;身份验证通过密钥实现。 跨团队写作 解决冲突 拉取 克隆 拉取最新版本 推送 远程仓库别名 直接使用git push推送 多人协作开发 分支命令 合并分支命令在主分支使用&#xff0c;将develop分支合并到…

【多模态】27、Vary | 通过扩充图像词汇来提升多模态模型在细粒度感知任务(OCR等)上的效果

文章目录 一、背景二、方法2.1 生成 new vision vocabulary2.1.1 new vocabulary network2.1.2 Data engine in the generating phrase2.1.3 输入的格式 2.2 扩大 vision vocabulary2.2.1 Vary-base 的结构2.2.2 Data engine2.2.3 对话格式 三、效果3.1 数据集3.2 图像细粒度感…

Git详细讲解

文章目录 一、Git相关概念二、本地分支中文件的添加 、提交2.1 文件状态2.2 创建Git仓库2.2.1 git init2.2.2 git clone 2.3 添加操作(git add)2.4 提交操作&#xff08;git commit&#xff09;2.5 撤销操作2.5.1 撤销 add操作2.5.2 撤销 commit操作2.5.3 覆盖上一次的commit操…

单片机的省电模式及策略

目录 一、单片机省电的核心策略 二、单片机IO口的几种模式 三、单片机的掉电运行模式 &#xff08;1&#xff09; 浅谈cpu运行为什么会需要时钟&#xff1f; &#xff08;2&#xff09;STC15系列单片机内部可以配置时钟 &#xff08;3&#xff09;分频策略&#xff0c;降低…

伪造身份请求怎么办?看这篇就够了

您好&#xff0c; 如果喜欢我的文章或者想上岸大厂&#xff0c;可以关注公众号「量子前端」&#xff0c;将不定期关注推送前端好文、分享就业资料秘籍&#xff0c;也希望有机会一对一帮助你实现梦想 JWT身份鉴权方案&#xff0c;token会作为主要的鉴权方式来作为前后端通信校验…

Linux下的crontab定时执行任务命令详解

在LINUX中&#xff0c;周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件&#xff0c;这些配置文件中包含了命令行及其调用时间。 cron的配置文件称为“crontab”&#xff0c;是“cron table”的简写。 一、cron服务   cron是一个…

[职场] 进入大数据领域需要掌握哪些软件 #其他#职场发展#职场发展

进入大数据领域需要掌握哪些软件 学习大数据首先我们要学习Java语言和Linux操作系统&#xff0c;这两个是学习大数据的基础&#xff0c;学习的顺序不分前后。 Java 大家都知道Java的方向有JavaSE、JavaEE、JavaME&#xff0c;学习大数据要学习那个方向呢? 只需要学习Java的…

Oracle 面试题 | 19.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

前后端通讯:前端调用后端接口的五种方式,优劣势和场景

Hi&#xff0c;我是贝格前端工场&#xff0c;专注前端开发8年了&#xff0c;前端始终绕不开的一个话题就是如何和后端交换数据&#xff08;通讯&#xff09;&#xff0c;本文先从最基础的通讯方式讲起。 一、什么是前后端通讯 前后端通讯&#xff08;Frontend-Backend Commun…

对象存储minio

参考Linux搭建免费开源对象存储 创建一个data目录 --address和--console-address是MinIO服务器启动命令中的两个参数&#xff0c;它们具有以下区别&#xff1a; --address参数&#xff1a;用于指定MinIO服务器监听的S3 API访问地址。S3 API是用于与MinIO进行对象存储操作的…

数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208)

数据库管理148期 2024-02-08 数据库管理-第148期 最强Oracle监控EMCC深入使用-05&#xff08;20240208&#xff09;1 性能主页2 ADDM Spotlight3 实时ADDM4 数据库的其他5 主机总结 数据库管理-第148期 最强Oracle监控EMCC深入使用-05&#xff08;20240208&#xff09; 作者&am…

Red Hat安装Red Hat OpenShift Local

文章目录 环境安装需求硬件操作系统软件包 安装 使用Red Hat OpenShift Local预设置设置Red Hat OpenShift Local启动实例访问OpenShift集群访问OpenShift web console使用OpenShift CLI访问OpenShift集群访问内部 OpenShift registry 使用odo部署示例应用安装odo 停止实例删除…

PointBeV:A Sparse Approach to BeV Predictions

参考代码&#xff1a;PointBeV 动机与出发点 常见显式构建BEV特征的算法会稠密设置BEV网格&#xff0c;这样就会引入背景像素上的无效计算&#xff0c;对应内存与计算资源使用也会变大。这篇文章通过前景点筛选、由粗到精细化、窗口时序融合方式构建一种稀疏化表达的BEV特征表…

陪诊系统|陪诊小程序|陪诊服务让就医更容易

陪诊系统已经出现了好几年。尤其是这两年&#xff0c;它得到了人们的广泛认可。陪诊行业的快速发展主要是因为人们对这个行业的需求非常大。目前&#xff0c;我国面临着严重的老龄化问题&#xff0c;生活节奏也越来越快&#xff0c;有时候无法亲自陪伴在老人的身边。陪诊工作人…