当前位置: 首页 > news >正文

哈希表题目:网格照明

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:网格照明

出处:1001. 网格照明

难度

6 级

题目描述

要求

n × n \texttt{n} \times \texttt{n} n×n 的二维网格 grid \texttt{grid} grid 上,每个单元格都有一盏灯,最初灯都处于关闭状态。

给你一个二维数组 lamps \texttt{lamps} lamps 表示灯的位置,其中 lamps[i] = [row i , col i ] \texttt{lamps[i] = [row}_\texttt{i}\texttt{, col}_\texttt{i}\texttt{]} lamps[i] = [rowi, coli] 表示打开位于 grid[row i ][col i ] \texttt{grid[row}_\texttt{i}\texttt{][col}_\texttt{i}\texttt{]} grid[rowi][coli] 的灯。即使同一盏灯在数组中出现多次,也是打开这盏灯。

当一盏灯打开时,会照亮自身单元格以及同一行、同一列和两条对角线上的所有其他单元格。

给你另一个二维数组 queries \texttt{queries} queries,其中 queries[j] = [row j , col j ] \texttt{queries[j] = [row}_\texttt{j}\texttt{, col}_\texttt{j}\texttt{]} queries[j] = [rowj, colj]。对于第 j \texttt{j} j 次查询,判断 grid[row j ][col j ] \texttt{grid[row}_\texttt{j}\texttt{][col}_\texttt{j}\texttt{]} grid[rowj][colj] 是否被照亮。在回答第 j \texttt{j} j 次查询之后,关闭位于 grid[row j ][col j ] \texttt{grid[row}_\texttt{j}\texttt{][col}_\texttt{j}\texttt{]} grid[rowj][colj] 的灯和相邻的 8 \texttt{8} 8 盏灯(如果存在)。如果一盏灯和 grid[row j ][col j ] \texttt{grid[row}_\texttt{j}\texttt{][col}_\texttt{j}\texttt{]} grid[rowj][colj] 共享边或角,则这盏灯是相邻的。

返回答案数组 ans \texttt{ans} ans,如果第 j \texttt{j} j 次查询的单元格被照亮,则 ans[j] \texttt{ans[j]} ans[j] 1 \texttt{1} 1,否则 ans[j] \texttt{ans[j]} ans[j] 0 \texttt{0} 0

示例

示例 1:

示例 1 图 1

输入: n = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,0]] \texttt{n = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,0]]} n = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,0]]
输出: [1,0] \texttt{[1,0]} [1,0]
解释:最初所有灯都是关闭的。上图中可以看到打开位于 grid[0][0] \texttt{grid[0][0]} grid[0][0] 的灯然后打开位于 grid[4][4] \texttt{grid[4][4]} grid[4][4] 的灯之后的网格。
0 \texttt{0} 0 次查询检查 grid[1][1] \texttt{grid[1][1]} grid[1][1] 是否被照亮(蓝色方框)。该单元格被照亮,所以 ans[0] = 1 \texttt{ans[0] = 1} ans[0] = 1。然后,关闭红色方框中的所有灯。
示例 1 图 2
1 \texttt{1} 1 次查询检查 grid[1][0] \texttt{grid[1][0]} grid[1][0] 是否被照亮(蓝色方框)。该单元格没有被照亮,所以 ans[1] = 0 \texttt{ans[1] = 0} ans[1] = 0。然后,关闭红色矩形中的所有灯。
示例 1 图 3

示例 2:

输入: n = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,1]] \texttt{n = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,1]]} n = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,1]]
输出: [1,1] \texttt{[1,1]} [1,1]

示例 3:

输入: n = 5, lamps = [[0,0],[0,4]], queries = [[0,4],[0,1],[1,4]] \texttt{n = 5, lamps = [[0,0],[0,4]], queries = [[0,4],[0,1],[1,4]]} n = 5, lamps = [[0,0],[0,4]], queries = [[0,4],[0,1],[1,4]]
输出: [1,1,0] \texttt{[1,1,0]} [1,1,0]

数据范围

  • 1 ≤ n ≤ 10 9 \texttt{1} \le \texttt{n} \le \texttt{10}^\texttt{9} 1n109
  • 0 ≤ lamps.length ≤ 20000 \texttt{0} \le \texttt{lamps.length} \le \texttt{20000} 0lamps.length20000
  • 0 ≤ queries.length ≤ 20000 \texttt{0} \le \texttt{queries.length} \le \texttt{20000} 0queries.length20000
  • lamps[i].length = 2 \texttt{lamps[i].length} = \texttt{2} lamps[i].length=2
  • 0 ≤ row i , col i < n \texttt{0} \le \texttt{row}_\texttt{i}\texttt{, col}_\texttt{i} < \texttt{n} 0rowi, coli<n
  • queries[i].length = 2 \texttt{queries[i].length} = \texttt{2} queries[i].length=2
  • 0 ≤ row j , col j < n \texttt{0} \le \texttt{row}_\texttt{j}\texttt{, col}_\texttt{j} < \texttt{n} 0rowj, colj<n

解法

思路和算法

每个单元格都位于一行、一列和两条对角线上。一个单元格被照亮,等价于至少有一盏打开的灯和该单元格位于同一行、同一列或者同一条对角线上。因此,为了快速判断一个单元格是否被照亮,需要记录每一行、每一列和两个方向的每一条对角线上打开的灯的数量,可以使用哈希表记录。

维护四个哈希表,分别记录每一行打开的灯的数量、每一列打开的灯的数量、每一条方向一对角线上打开的灯的数量和每一条方向二对角线上打开的灯的数量,其中方向一对角线表示从左上到右下方向的对角线,方向二对角线表示从左下到右上方向的对角线。这四个哈希表分别称为行哈希表、列哈希表、对角线一哈希表和对角线二哈希表。

0 ≤ row , col < n 0 \le \textit{row}, \textit{col} < n 0row,col<n 时,如果位于第 row \textit{row} row 行第 col \textit{col} col 列的灯被打开,则需要将这盏灯存入四个哈希表。

  • 由于灯所在的行是 row \textit{row} row,因此在行哈希表中将 row \textit{row} row 对应的数量加 1 1 1

  • 由于灯所在的列是 col \textit{col} col,因此在列哈希表中将 col \textit{col} col 对应的数量加 1 1 1

  • 由于在方向一对角线上,如果向左上移动一步则 row \textit{row} row col \textit{col} col 同时减 1 1 1,如果向右下移动一步则 row \textit{row} row col \textit{col} col 同时加 1 1 1,因此在同一条方向一对角线上的每个单元格满足 row − col \textit{row} - \textit{col} rowcol 是定值,在对角线一哈希表中将 row − col \textit{row} - \textit{col} rowcol 对应的数量加 1 1 1

  • 由于在方向二对角线上,如果向左下移动一步则 row \textit{row} row 1 1 1 col \textit{col} col 1 1 1,如果向右上移动一步则 row \textit{row} row 1 1 1 col \textit{col} col 1 1 1,因此在同一条方向二对角线上的每个单元格满足 row + col \textit{row} + \textit{col} row+col 是定值,在对角线二哈希表中将 row + col \textit{row} + \textit{col} row+col 对应的数量加 1 1 1

数组 lamps \textit{lamps} lamps 表示打开的灯的位置。遍历数组 lamps \textit{lamps} lamps,对其中的每一个位置 [ row , col ] [\textit{row}, \textit{col}] [row,col],使用该位置更新四个哈希表。

由于数组 lamps \textit{lamps} lamps 中可能存在重复的位置,因此需要去重,避免同一个位置的灯被重复计算。去重的方法是使用哈希集合存储所有打开的灯的位置,哈希集合可以确保同一个位置只被加入一次。由于每一盏灯所在的行 row \textit{row} row 和列 col \textit{col} col 都是整数且都在范围 [ 0 , n − 1 ] [0, n - 1] [0,n1] 内,因此可以定义哈希函数 f ( row , col ) = row × n + col f(\textit{row}, \textit{col}) = \textit{row} \times n + \textit{col} f(row,col)=row×n+col,该哈希函数可以确保不同位置对应的哈希值不同。

假设存在位置 [ row 1 , col 1 ] [\textit{row}_1, \textit{col}_1] [row1,col1] [ row 2 , col 2 ] [\textit{row}_2, \textit{col}_2] [row2,col2] 满足 f ( row 1 , col 1 ) = f ( row 2 , col 2 ) f(\textit{row}_1, \textit{col}_1) = f(\textit{row}_2, \textit{col}_2) f(row1,col1)=f(row2,col2),则有 row 1 × n + col 1 = row 2 × n + col 2 \textit{row}_1 \times n + \textit{col}_1 = \textit{row}_2 \times n + \textit{col}_2 row1×n+col1=row2×n+col2,即 ( row 1 − row 2 ) × n = col 2 − col 1 (\textit{row}_1 - \textit{row}_2) \times n = \textit{col}_2 - \textit{col}_1 (row1row2)×n=col2col1。由于 ∣ row 1 − row 2 ∣ < n |\textit{row}_1 - \textit{row}_2| < n row1row2<n ∣ col 2 − col 1 ∣ < n |\textit{col}_2 - \textit{col}_1| < n col2col1<n,且位置都是整数,因此一定有 row 1 − row 2 = col 2 − col 1 = 0 \textit{row}_1 - \textit{row}_2 = \textit{col}_2 - \textit{col}_1 = 0 row1row2=col2col1=0 [ row 1 , col 1 ] [\textit{row}_1, \textit{col}_1] [row1,col1] [ row 2 , col 2 ] [\textit{row}_2, \textit{col}_2] [row2,col2] 是相同的位置。

定义哈希函数之后,根据哈希函数计算数组 lamps \textit{lamps} lamps 中的每个位置对应的哈希值。对于每个位置,只有当该位置的哈希值不在哈希集合中时,才将哈希值存入哈希集合,并使用该位置更新四个哈希表。

查询时,对于数组 queries \textit{queries} queries 中的每个位置 [ row , col ] [\textit{row}, \textit{col}] [row,col],首先判断该位置在四个哈希表中对应的数量是否大于 0 0 0,得到查询结果,然后将该位置和全部相邻位置的灯都关闭。具体做法如下。

  1. 在行哈希表中得到 row \textit{row} row 的数量、在列哈希表中得到 col \textit{col} col 的数量、在对角线一哈希表中得到 row − col \textit{row} - \textit{col} rowcol 的数量、在对角线二哈希表中得到 row + col \textit{row} + \textit{col} row+col 的数量,如果该位置在四条线上对应的数量至少有一个大于 0 0 0 则查询结果是 1 1 1,如果该位置在四条线上对应的数量都是 0 0 0 则查询结果是 0 0 0

  2. 遍历位置 [ row , col ] [\textit{row}, \textit{col}] [row,col] 和全部相邻位置,对于每个位置,如果该位置对应的哈希值在哈希集合中,则说明该位置的灯处于打开状态,需要关闭,将该位置对应的哈希值从哈希集合中删除,并将该位置在四个哈希表中对应的数量分别减 1 1 1

查询时的关灯操作可以优化。如果一个单元格所在位置和全部相邻位置中至少有一盏灯打开,则该单元格一定被照亮,因此如果一个单元格没有被照亮,则该单元格所在位置和全部相邻位置的灯一定都处于关闭状态。只有当查询结果是 1 1 1 时,才需要执行关灯操作。

代码

class Solution {public int[] gridIllumination(int n, int[][] lamps, int[][] queries) {Set<Long> set = new HashSet<Long>();Map<Integer, Integer> rowMap = new HashMap<Integer, Integer>();Map<Integer, Integer> columnMap = new HashMap<Integer, Integer>();Map<Integer, Integer> diagonal1Map = new HashMap<Integer, Integer>();Map<Integer, Integer> diagonal2Map = new HashMap<Integer, Integer>();for (int[] lamp : lamps) {int row = lamp[0], column = lamp[1];long position = (long) row * n + column;if (set.add(position)) {rowMap.put(row, rowMap.getOrDefault(row, 0) + 1);columnMap.put(column, columnMap.getOrDefault(column, 0) + 1);int diagonal1 = row - column;diagonal1Map.put(diagonal1, diagonal1Map.getOrDefault(diagonal1, 0) + 1);int diagonal2 = row + column;diagonal2Map.put(diagonal2, diagonal2Map.getOrDefault(diagonal2, 0) + 1);}}int[][] directions = {{0, 0}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}};int queriesCount = queries.length;int[] ans = new int[queriesCount];for (int j = 0; j < queriesCount; j++) {int[] query = queries[j];int queryRow = query[0], queryColumn = query[1];boolean flag = rowMap.containsKey(queryRow) || columnMap.containsKey(queryColumn) || diagonal1Map.containsKey(queryRow - queryColumn) || diagonal2Map.containsKey(queryRow + queryColumn);if (flag) {ans[j] = 1;for (int[] direction : directions) {int row = queryRow + direction[0], column = queryColumn + direction[1];int diagonal1 = row - column, diagonal2 = row + column;if (row >= 0 && row < n && column >= 0 && column < n) {long position = (long) row * n + column;if (set.remove(position)) {rowMap.put(row, rowMap.get(row) - 1);if (rowMap.get(row) == 0) {rowMap.remove(row);}columnMap.put(column, columnMap.get(column) - 1);if (columnMap.get(column) == 0) {columnMap.remove(column);}diagonal1Map.put(diagonal1, diagonal1Map.get(diagonal1) - 1);if (diagonal1Map.get(diagonal1) == 0) {diagonal1Map.remove(diagonal1);}diagonal2Map.put(diagonal2, diagonal2Map.get(diagonal2) - 1);if (diagonal2Map.get(diagonal2) == 0) {diagonal2Map.remove(diagonal2);}}}}}}return ans;}
}

复杂度分析

  • 时间复杂度: O ( l + q ) O(l + q) O(l+q),其中 l l l 是数组 lamps \textit{lamps} lamps 的长度, q q q 是数组 queries \textit{queries} queries 的长度。需要遍历数组 lamps \textit{lamps} lamps,对于每个打开的灯的位置,将该位置存入哈希集合以及更新四个哈希表的时间都是 O ( 1 ) O(1) O(1),然后需要遍历数组 queries \textit{queries} queries,对于每个查询,计算查询结果以及更新哈希表和哈希集合的时间都是 O ( 1 ) O(1) O(1),因此总时间复杂度是 O ( l + q ) O(l + q) O(l+q)

  • 空间复杂度: O ( l ) O(l) O(l),其中 l l l 是数组 lamps \textit{lamps} lamps 的长度。需要使用四个哈希表记录打开的灯的数量以及使用哈希集合存储打开的灯的位置,哈希表和哈希集合的空间复杂度都是 O ( l ) O(l) O(l)。注意返回值不计入空间复杂度。

相关文章:

哈希表题目:网格照明

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;网格照明 出处&#xff1a;1001. 网格照明 难度 6 级 题目描述 要求 在 n n \texttt{n} \times \texttt{n} nn 的二维网格 grid \texttt{grid}…...

Python多线程爬虫为何效率低下?解析原因并提高爬虫速度的方法

目录 一、知识点二、多线程语法GIL单线程多线程单线程多线程 最后的惊喜 一、知识点 线程&#xff08;Thread&#xff09;也叫轻量级进程&#xff0c;是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。线程自己不拥有…...

Python 标准方形信号定义(完美实现)

之前我们介绍了如何定义一个标准的正弦信号,这里我们做一下延申,简单说明一下如何定义一个方形函数。 方形信号表达式 square signal = g ( t ) = sign [ sin ⁡ ( 2 π f t +...

[Daimayuan] 走不出的迷宫(C++,图论,DP)

有一个 H H H 行 W W W 列的迷宫&#xff08;行号从上到下是 1 − H 1−H 1−H&#xff0c;列号从左到右是 1 − W 1−W 1−W&#xff09;&#xff0c;现在有一个由 . 和 # 组成的 H 行 W 列的矩阵表示这个迷宫的构造&#xff0c;. 代表可以通过的空地&#xff0c;# 代表不…...

【LeetCode: 1416. 恢复数组 | 暴力递归=>记忆化搜索=>动态规划 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

centos7查看磁盘io

1.查看所使用到的命令为iostat&#xff0c;centos7没有自带iostat&#xff0c;需要安装一下 2.安装iostat命令 yum -y install sysstat 3.使用iostat命令 iostat %user&#xff1a;表示用户空间进程使用 CPU 时间的百分比 %nice&#xff1a;表示用户空间进程以降低优先级的…...

浅析低代码开发的典型应用构建场景v

在数字经济蓬勃发展的大势之下&#xff0c;企业软件开发人员供给不足、开发速度慢、开发成本高、数字化和智能化成效不明显等问题日益凸出&#xff0c;阻碍了企业的数字化转型。 而近年来&#xff0c;低代码的出现推动了经济社会的全面提效&#xff0c;也成为人才供求矛盾的润…...

3 连续模块(二)

3.5 零极点增益模块 在控制系统设计和分析中&#xff0c;常用的函数包括 传递函数&#xff08;tf&#xff09;、零极点&#xff08;zpk&#xff09;和状态空间&#xff08;ss&#xff09;函数 传递函数&#xff08;tf&#xff09;&#xff1a;用于表示线性时不变系统的输入输出…...

ElasticSearch 部署及安装ik分词器

ansiable playbook链接&#xff1a; https://download.csdn.net/download/weixin_43798031/87719490 需要注意的点&#xff1a;公司es集群现以三个角色部署分别为 Gateway、Master、Data 简单的理解可以理解为在每台机器上部署了三个es&#xff0c;以端口和配置文件来区分这三…...

汽车充电桩检测设备TK4860C交流充电桩检定装置

TK4860C是一款在交流充电桩充电过程中实时检测充电电量的标准仪器&#xff0c;仪器以新能源车为负载&#xff0c;结合宽动态范围测量技术、电能ms级高速刷新等技术&#xff0c;TK4860C实现充电全过程的累积电能精准计量&#xff0c;相比于传统的预设检定点的稳态计量&#xff0…...

备份和恢复:确保数据安全

备份和恢复&#xff1a;确保数据安全 在计算机领域中&#xff0c;备份和恢复数据对于确保数据安全至关重要。本文将介绍备份策略概述、使用mysqldump进行备份、使用MySQL Enterprise Backup进行备份、恢复数据以及备份和恢复的最佳实践。 备份策略概述 在制定备份策略时&…...

8 DWA(一)

8 DWA DMA简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取&#xff08;可以直接访问32内部存储器&#xff0c;包括内存SRAM&#xff0c;Flash&#xff09; DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#x…...

mysql慢查询日志

概念 MySQL的慢查询日志是MySQL提供的一种日志记录&#xff0c;它用来记录在MySQL中响应时间超过阀值的语句&#xff0c;具体指运行时间超过long_query_time值的SQL&#xff0c;则会被记录到慢查询日志中。long_query_time的默认值为10&#xff0c;意思是运行10秒以上的语句。…...

Sentinel介绍及搭建

分布式流量防护 服务雪崩 服务提供者不可用导致服务调用者也跟着不可用&#xff0c;以此类推引起整个链路中的所有微服务都不可用 分布式流量防护 在分布式系统中&#xff0c;服务之间的相互调用会生成分布式流量。如何通过组件进行流量防护&#xff0c;并有效控制流量&…...

最受信任的低代码平台排行榜

近年来&#xff0c;随着数字化转型的兴起&#xff0c;低代码平台获得了大量关注。它允许用户在几乎没有编码知识的情况下创建应用程序&#xff0c;从而使企业能够简化其流程并提高效率。随着低代码平台的日益流行&#xff0c;要确定哪些平台最可靠、最值得信赖并非易事。在本文…...

Django框架之创建项目、应用并配置数据库

django3.0框架创建项目、应用并配置数据库 创建项目 进入命令行 新建一个全英文的目录 进入目录 输入命令 django-admin startproject project 项目目录层级 查看当前目录层级 tree /f 目录文件说明 创建数据库 做一个学生管理系统做演示&#xff0c;使用navicat创建数据…...

软件测试之基础概念学习篇(需求 + 测试用例 + 开发模型 + 测试模型 + BUG)

文章目录 1. 什么是软件测试2. 软件测试和软件开发的区别3. 软件测试和软件调试的区别4. 什么是需求1&#xff09;以需求为依据设计测试用例 5. 测试用例是什么6. 什么是 BUG&#xff08;软件错误&#xff09;7. 五个开发模型1&#xff09;瀑布模型2&#xff09;螺旋模型3&…...

Windows下版本控制器(SVN) - 1、开发中的实际问题+2、版本控制简介

文章目录 基础知识-Windows下版本控制器(SVN)1、开发中的实际问题2、版本控制简介2.1 版本控制[Revision control]2.2 Subversion2.3 Subversion 的优良特性2.4 SVN 的工作原理&#xff1a;2.5 SVN 基本操作 本人其他相关文章链接 基础知识-Windows下版本控制器(SVN) 1、开发中…...

Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记

Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记 摘要 Talking head synthesis is an emerging technology with wide applications in film dubbing, virtual avatars and online education. Recent NeRF-based methods generate more n…...

SpringBoot 项目整合 Redis 教程详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...