• 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) SET = O(H×W)O(H×W)O(H×W) ; GET = O(1)O(1)O(1) ; SUM = O(H×W×S)O(H×W×S)O(H×W×S) O(H×W)O(H×W)O(H×W) 36ms (92.00%) Ans 2 (Python) Ans ...
题目：原题链接（困难）
标签：设计、图、拓扑排序

解法
时间复杂度
空间复杂度
执行用时

Ans 1 (Python)
SET = $O(H×W)$ ; GET = $O(1)$ ; SUM = $O(H×W×S)$
$O(H×W)$
36ms (92.00%)

Ans 2 (Python)

Ans 3 (Python)

解法一：
class Excel:

def __init__(self, h: int, w: str):
self.h = h
self.w = self._get_col(w) + 1
self.table = [[0] * self.w for _ in range(self.h)]
self.formula = {}  # 公式列表（用于删除公式时使用）

self.graph = collections.defaultdict(collections.Counter)  # 单元格关系图（用于更新值时使用）

def set(self, r: int, c: str, v: int) -> None:
r -= 1
c = self._get_col(c)
# print("[SET]", (r, c), "->", v)
if 0 <= r < self.h and 0 <= c < self.w:
self._update(r, c, v - self.table[r][c])  # 更新单元格的值，并更新所有引用了这个单元格的值
self._remove(r, c)  # 移除单元格中的公式和单元格关系

def get(self, r: int, c: str) -> int:
r -= 1
c = self._get_col(c)
return self.table[r][c]

def sum(self, r: int, c: str, strs: List[str]) -> int:
r -= 1
c = self._get_col(c)
# print("[SUM]", (r, c), "->", strs)
self.formula[(r, c)] = collections.Counter()  # 引用的单元格列表
self.table[r][c] = 0
for s in strs:
if ":" not in s:
r1, c1 = int(s[1:]) - 1, self._get_col(s[0])
# print("[SUM]", (r, c), "<-", (r1, c1))
self.formula[(r, c)][(r1, c1)] += 1  # 记录公式关系
self.table[r][c] += self.table[r1][c1]  # 计算当前位置的值
self.graph[(r1, c1)][(r, c)] += 1  # 更新单元格关系图
else:
s1, s2 = s.split(":")
r1, c1 = int(s1[1:]) - 1, self._get_col(s1[0])
r2, c2 = int(s2[1:]) - 1, self._get_col(s2[0])
# print("[SUM]", s, "->", (r1, c1), (r2, c2))
for r3 in range(r1, r2 + 1):
for c3 in range(c1, c2 + 1):
# print("[SUM]", (r, c), "<-", (r3, c3))
self.formula[(r, c)][(r3, c3)] += 1  # 记录公式关系
self.table[r][c] += self.table[r3][c3]  # 计算当前位置的值
self.graph[(r3, c3)][(r, c)] += 1  # 更新单元格关系图
return self.table[r][c]

def _remove(self, r: int, c: int) -> None:
"""移除单元格中的公式和单元格关系"""
if (r, c) in self.formula:
for r1, c1 in self.formula[(r, c)]:
del self.graph[(r1, c1)][(r, c)]
del self.formula[(r, c)]

def _update(self, r: int, c: int, v: int) -> None:
"""更新单元格的值，并更新所有引用了这个单元格的值"""
queue = collections.deque([(r, c, 1)])
while queue:
(r1, c1, t1) = queue.popleft()
self.table[r1][c1] += v * t1
# print("[UPDATE]", (r, c), "->", (r1, c1), "=", v * t1)
if (r1, c1) in self.graph:
for (r2, c2) in self.graph[(r1, c1)]:
queue.append((r2, c2, t1 * self.graph[(r1, c1)][(r2, c2)]))

@staticmethod
def _get_col(s: str) -> int:
"""依据列名计算列号"""
ans = 0
for i in range(len(s)):
ans += (ord(s[-(i + 1)]) - 64) * pow(26, i)
return ans - 1



展开全文
• 目录 1、excel使用函数前须知： 2、excel基本聚合函数：count、sum、...5、Excel常用日期时间周期处理函数公式 6、排名rank、截取mid、分组排名sumproduct 7、累计求和、累计数量、分组累计求和、分组累计数量...
目录

1、excel使用函数前须知：

2、excel基本聚合函数：count、sum、average、max、min

3、条件if、拼接&、左截取left、右截取right

4、首字母大写proper、查找元素位置find

5、Excel常用日期时间周期处理函数公式

6、排名rank、截取mid、分组排名sumproduct

7、累计求和、累计数量、分组累计求和、分组累计数量、排名、分组排名

8、条件聚合：countifs、sumifs 、averageifs

9、多表关联匹配基本方法vlookup

10、INDEX+MATCH实现多表关联匹配

11、位置替换replace、文本替换substitute

12、SUMPRODUCT乘积，条件乘积

13、返回列号COLUMN、行号ROW

1、excel使用函数前须知：

F1键：获取帮助；F4键：切换相对引用和绝对引用；锁定行：=A$1；锁定列：=$A1；锁定行和列：=$A$1；拼接：&

2、excel基本聚合函数：count、sum、average、max、min

3、条件if、拼接&、左截取left、右截取right

4、首字母大写proper、查找元素位置find

5、Excel常用日期时间周期处理函数公式

字符串日期转化为标准格式：=--TEXT(A2,''0-00-00'')

根据时间提取年月：=YEAR(A1)&"年"&MONTH(A1)&"月"

根据时间算出星期几（中文）：=TEXT(A1,"aaaa") ， ="星期"&WEEKDAY(A1,2)

根据时间算出星期几（英文）：=TEXT(A1,"dddd")

根据时间返回一年的周数：=WEEKNUM(A1)

根据时间返回一年的季度值：=INT((MONTH(A2)+2)/3) ，

=IF(MONTH(A2)<=3,1,IF(MONTH(A2)<=6,2,IF(MONTH(A2)<=9,3,4)))

6、排名rank、截取mid、分组排名sumproduct

=RANK(D2,$D$2:$D$6,0)  #排名

mid(截取的字符串,截取的起始位置,截取长度)

SUMPRODUCT(($F$2:$F$6=F2)*($D$2:$D$6>D2))+1  #分组排名

7、累计求和、累计数量、分组累计求和、分组累计数量、排名、分组排名

累计：要点就是把起始位置锁死，其他位置随着拖拽位置变化而变化。

下图案例：

累计求和=SUM($D$2:D2)，下拉填充公式即可

累计次数=COUNT($A$2:A2)，下拉填充公式即可

分组--累计--求和=SUMIFS($D$2:D2,$B$2:B2,B2)，下拉填充公式即可

分组--累计--计数=COUNTIFS($B$2:B2,B2)，下拉填充公式即可

8、条件聚合：countifs、sumifs 、averageifs

所有单条件聚合的函数···if()都可以用多条件聚合函数···ifs()代替。

COUNTIFS(criteria_range1, criteria1, [criteria_range2, criteria2],…)

COUNTIFS 函数语法具有以下参数：

criteria_range1    必需。 在其中计算关联条件的第一个区域。

criteria1    必需。 条件的形式为数字、表达式、单元格引用或文本，它定义了要计数的单元格范围。 例如，条件可以表示为 32、">32"、B4、"apples"或 "32"。

criteria_range2, criteria2, ...    可选。 附加的区域及其关联条件。 最多允许 127 个区域/条件对。

SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)

参数名称

说明

Sum_range   （必需）

要求和的单元格区域。

Criteria_range1   （必需）

使用 Criteria1 测试的区域。

Criteria_range1  和 Criteria1 设置用于搜索某个区域是否符合特定条件的搜索对。 一旦在该区域中找到了项，将计算 Sum_range 中的相应值的和。

Criteria1   （必需）

定义将计算 Criteria_range1 中的哪些单元格的和的条件。 例如，可以将条件输入为 32、">32"、B4、"苹果" 或 "32"。

Criteria_range2, criteria2, …    (optional)

附加的区域及其关联条件。 最多可以输入 127 个区域/条件对。

AVERAGEIFS(avg_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)

参数用法和sumifs一样
案例：

9、多表关联匹配基本方法vlookup

=VLOOKUP（要查找的值、要在其中查找值的区域、区域中包含返回值的列号、精确匹配或近似匹配 – 指定为 0/FALSE 或 1/TRUE）

10、INDEX+MATCH实现多表关联匹配

=INDEX($E$1:$F$7,MATCH(A2,$E$1:$E$7,0),2)

解释：INDEX(要返回值的单元格区域或数组, 返回值所在的行号, 返回值所在的列号)

其中返回值所在的行号用：match(目标值, 查找区域, 0/1/-1匹配方法)。

如：在第2个表中匹配第1个表中的语文成绩，INDEX(要返回值的单元格区域或数组为：A1:B6, 行号：MATCH(目标值：A10,查找区域A1:A6,匹配方式：0), 列号: 2)

11、位置替换replace、文本替换substitute

文本字符替换：=SUBSTITUTE(A2,"QBD","123") 表示将QBD替换为123
字符串位置字符替换：=REPLACE(A2,2,3,123) 表示从第2个字符（包含第2个）开始的3个字符替换为123

12、SUMPRODUCT乘积，条件乘积

乘积：=SUMPRODUCT($D$2:$D$11,$G$2:$G$11)
单条件乘积：=SUMPRODUCT(($E$2:$E$11="2018")*($D$2:$D$11),$G$2:$G$11)
多条件乘积：=SUMPRODUCT(($E$2:$E$11="2019")*($B$2:$B$11="上海")*($D$2:$D$11),$G$2:$G$11)

13、返回列号COLUMN、行号ROW

返回列号=COLUMN(对象)   =COLUMN(C1)  #=3
返回包含元素的列数=COLUMNS(对象)  =COLUMNS(A1:E2)  #=5
返回行号=ROW(对象)    =row(A2)    #=2
返回对象中包含的行数=ROWS(对象)   =ROWS(A13:B15)  #=3
更多函数公式可以利用公式的搜索功能和帮助(F1)键功能。

展开全文
• Excel公式应用大全，Excel数组求和、Excel金额大写表达式、Excel整行颜色填充、Excel自动查询系统公式、Excel业绩查询、Excel时间_日期_公式查询、Excel查找相应的名字放在指定的"列"、Excel彩票号码生成器等等。...
• 对可见区域求和 判断日期，没到预定日期不显示 自动记录数据的录入时间 统计不重复的个数 计算错误值不显示 查找重复内容 =IF(COUNTIF(A:A,A2)&gt;1,"重复","") 用出生年月来计算年...
目录

查找重复内容

用出生年月来计算年龄

从输入的18位身份证号计算出生年月

从输入的身份证号码内让系统自动提取性别

根据出生日期自动计算周岁

查找最后一行的数据

对可见区域求和

判断日期，没到预定日期不显示

自动记录数据的录入时间

统计不重复的个数

计算错误值不显示

查找重复内容

=IF(COUNTIF(A:A,A2)>1,"重复","")

用出生年月来计算年龄

=TRUNC((DAYS360(H6,"2009/8/30",FALSE))/360,0)

从输入的18位身份证号计算出生年月

=CONCATENATE(MID(E2,7,4),"/",MID(E2,11,2),"/",MID(E2,13,2))

从输入的身份证号码内让系统自动提取性别

=IF(LEN(C2)=15,IF(MOD(MID(C2,15,1),2)=1,"男","女"),IF(MOD(MID(C2,17,1),2)=1,"男","女"))
'公式内的“C2”代表的是输入身份证号码的单元格

根据出生日期自动计算周岁

=TRUNC((DAYS360(D3,NOW( )))/360,0)

查找最后一行的数据

=LOOKUP(9E+307,$E$3:\$E)

对可见区域求和

=SUBTOTAL(109,A2:A50000)

判断日期，没到预定日期不显示

'第一种：
=IF(TODAY()-A3>=0,sum(D2,B3)-C3,"")

'第二种：
=IF(MONTH(TODAY())>=9,"成立","不成立")

'第三种：
=IF(AND(YEAR(TODAY())>=2018,MONTH(TODAY())>=5),"成立","不成立")

自动记录数据的录入时间

=IF(D2="","",IF(E2="",NOW(),E2))

统计不重复的个数

=SUMPRODUCT(1/COUNTIF(D3:D&MAX((D3:D<>"")*ROW(D3:D)),D3:D&MAX((D3:D<>"")*ROW(D3:D))))

计算错误值不显示

=IFERROR(原公式,"")


展开全文
• 1. 如何对一列应用同一个公式?   选择你刚输入公式的单元格，按住shift后再选择你最后需要输入该公式的单元格，然后再Ctrl+D   Ctrl+D  ...2. 时间求和 TEXT(SUM(A:A),"[h]:mm:ss")...
1. 如何对一列应用同一个公式?

选择你刚输入公式的单元格，按住shift后再选择你最后需要输入该公式的单元格，然后再Ctrl+D

Ctrl+D
向下填充。
Ctrl+R
向右填充

2. 时间求和
TEXT(SUM(A:A),"[h]:mm:ss")
展开全文
• ## EXCEL函数公式集

热门讨论 2010-03-16 03:26:38
隔行求和公式设置 隔列将相同项目进行求和 隔行或隔列加总 请问如何在一百行内做隔行相加 如何将间隔一定的列的数据相加呢 隔列求和（A、B列） 隔列求和的公式 隔列求和 关于隔行、隔列求和的问题 EXCEL中求两列的...
• 　7.5 求和公式 　7.5.1 对范围内的所有单元格求和 7.5.2　计算累计和 7.5.3 求n个最大值的和 7.5.4 使用单个条件求和 7.5.5 只对负值求和 7.5.6　根据范围Difference的值求和 7.5.7 基于文本的比较结果求和 ...
• 　7.5 求和公式 　7.5.1 对范围内的所有单元格求和 7.5.2　计算累计和 7.5.3 求n个最大值的和 7.5.4 使用单个条件求和 7.5.5 只对负值求和 7.5.6　根据范围Difference的值求和 7.5.7 基于文本的比较结果求和 ...
• 技巧263-1 海量数据多条件查询的学历证书_A1 技巧263-1 海量数据多条件查询的学历证书_A2 技巧263-2 多个符合条件查询结果的文本...技巧272 以时间为序列的海量记录双条件求和 技巧273 制作出口货物装箱单打印标签 ..
• Excel时间相加： 求总时间的公式为=TEXT(SUM(A2:A33),"[h]:mm") 只求小时用这个公式=TEXT(SUM(A2:A33),"[h]")
• Excel公式-TEXT函数使用日期格式转换千分位和精确位对时间求和 日期格式转换 text()函数对日期进行格式转换时，不同的格式参数对应的效果如下表格所示（列名为参数）： 千分位和精确位 “0"在TEXT函数中代表一个...
• 隔行求和公式设置 隔列将相同项目进行求和 隔行或隔列加总 请问如何在一百行内做隔行相加 如何将间隔一定的列的数据相加呢 隔列求和（A、B列） 隔列求和的公式 隔列求和 关于隔行、隔列求和的问题 EXCEL中求两列的...
• 本书从函数功能、函数格式、参数说明、注意事项、Excel 版本提醒、案例应用、交叉参考7 个方面，全面、细致地介绍了Excel 2016/2013/2010/2007/2003 中公式和函数的使用方法、实际应用和操作技巧。最后3 章还将公式...
• 有时候，我们会对一些数据进行隐藏（如筛选）后进行求和等运算，但在现成的公式却无法找到可利用的，所以只能依靠VBA来实现。创建自己的工作表函数，请参考：...
• Excel 使用技巧集锦——163种技巧 目 录 一、 基本方法 7 1. 快速选中全部工作表 7 2. 快速启动Excel 7 3. 快速删除选定区域数据 7 4. 给单元格重新命名 7 5. 在Excel中选择整个单元格范围 7 6. 快速移动/复制...
• Excel曾经一度出现了严重Bug，主要有两种比较悲催的情况，首先是这种：   更加悲催的是这种： ...目录：数字处理、判断公式、统计公式、求和公式、查找与引用公式、字符串处理公式、其他常用公式...
• 1、文本算式 =EVALUATE 2、设置单元格样式 选中所在的区域，右键，设置单元格...对一列数据进行求和我们习惯了用sum函数，输入公式毕竟也需要时间，本着时间就是金钱的理念，我们要学会用快捷键进行求和，【Alt...
• 2. 快速启动EXCEL 9 3. 快速删除选定区域数据 9 4. 给单元格重新命名 9 5. 在EXCEL中选择整个单元格范围 10 6. 快速移动/复制单元格 10 7. 快速修改单元格式次序 10 8. 彻底清除单元格内容 11 9. 选择单元格 11 10. ...
• Excel 使用技巧集锦——163种技巧 目 录 一、 基本方法 8 1. 快速选中全部工作表 8 2. 快速启动EXCEL 8 3. 快速删除选定区域数据 9 4. 给单元格重新命名 9 5. 在EXCEL中选择整个单元格范围 9 6. 快速移动/复制...
• 函数可为你提供执行各种任务的功能，如进行数学运算、查找值或者计算日期和时间。 1、函数中涉及到的基本概念 （1）使用 Excel 进行数学计算 （2）有关公式、单元格和区域的详细信息 2、函数简介 可以使用...
• Excel常用技巧大全1、快速填充公式的三种方式2、最快求和3、添加文字下面线条的2种方法4、设置列宽的3种方法5、以cm为单位设置行高跟列宽6、输入0开头数字的2种方法7、快速输入当天日期与时间8、如何输入分数？...
• 今天就和大家分享6个Excel快速操作小技巧，让你可以节省更多时间，毕竟时间就是生命，时间就是金钱。 1、快速求和 求和大家都知道可以使用SUM函数，但是你想想，如果行列很多，你写一个公式，再把...
• Excel是办公室自动化中非常重要的一款数据处理软件，在Excel中函数用来分析和处理数据，如排序、求和、计数、提取数据等等。　Excel函数一共有11类，分别是数据库函数、日期与时间函数、工程函数、财务函数、信息...
• 【sumifcol】【AVER】【hesum】【NOWW】【SFZ】【批注】【合并】【取数】【唯一值】【消除空值】【颜色求和】【颜色计数】【工作表】【数字】【分割取数】【共有项】不同项】【【公式】【计算】【公式长度】【大写】...
• 2个简单扼要的Excel学习文档 ...4、利用数组公式进行条件求和 5、利用数组公式进行条件记数（就是求个数） 6、数组应用范例 有些是对一些数组公式的解释，有些是我自己的心得体会，希望大家指正。
• 一起来学习这45个职场Excel小窍门，轻轻松松提高工作效率，超实用，新技能get！ 1、快速填充公式的三种方式 2、最快求和 3、添加文字下面线条的2种方法 4、设置列宽的3种方法 5、以cm为单位设置行高跟...
• 　第12章 创建计数和求和公式 　第13章 创建查找数值的公式 　第14章 创建简单财务应用公式 第3部分 Excel 2007图表 　第15章 图表创建入门 　第16章 高级图表制作 　第17章 使用图形和图片增强工作表效果 第...
• 　第12章 创建计数和求和公式 　第13章 创建查找数值的公式 　第14章 创建简单财务应用公式 第3部分 Excel 2007图表 　第15章 图表创建入门 　第16章 高级图表制作 　第17章 使用图形和图片增强工作表效果 第...