第84场周赛
时间:2022-07-28
本文章向大家介绍第84场周赛,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
832. 翻转图像
题解:根据描述,我们按照描述一步一步来就行。
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
for(int i=0;i<A.size();++i){
for(int j=0;j<A[i].size();++j){
A[i][j] =(!A[i][j]);
}
reverse(A[i].begin(),A[i].end());
}
return A;
}
833. 字符串中的查找与替换
题解:根据描述,有如下想法,对于测试点1,只要找到首个匹配字符位置,末尾字符匹配位置,使用replace函数替换即可。在下轮替换的时候,开始找的位置应为由于插入而带来的字符串长度改变的偏置。
根据这一想法,可以通过前8个测试点。后面的替换位置并不是有序的,因此我们需要把替换位置sort一下。重写一下输入的数据结构。
struct tmp{
int index;
string source;
string target;
};
static bool cmp(struct tmp a,struct tmp b){
return a.index<b.index;
}
string findReplaceString(string &S, vector<int>& indexes, vector<string>& sources, vector<string>& targets) {
vector<struct tmp>v(indexes.size());
for(int i=0;i<indexes.size();++i){
v[i].index = indexes[i];
v[i].source = sources[i];
v[i].target = targets[i];
}
sort(v.begin(),v.end(),cmp);
int bisa=0;
for(int i=0;i<indexes.size();++i){
int k=0,j,start=0;
if(i=0)j = v[i].index;
else j = v[i].index+bisa;
start=j;
for(;j<S.length();++j){
if(S[j]!=v[i].source[k])
break;
else k++;
}
if(k==v[i].source.length()){
S.replace(S.begin()+start,S.begin()+start+v[i].source.length(),v[i].target);
//每次替换带来了偏置
bisa += v[i].target.length()-v[i].source.length();
}
}
return S;
}
835. 图像重叠
题解:根据描述,数据量在0-30范围内,使用蛮力算法即可。枚举A中出现的1,对于B中出现的1,有相同偏置的位置在记录数组中加一。比如
index A |
0 |
1 |
2 |
index B |
0 |
1 |
2 |
---|---|---|---|---|---|---|---|
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
2 |
0 |
1 |
0 |
2 |
0 |
0 |
1 |
对于矩阵A(0,0)处的1,B中所有的1(分别位于[(1,1)(1,2),(2,2)]处),相对于A(0,0)处的偏置分别为[(1,1)(1,2),(2,2)] 下标相减即可
对于矩阵A(0,1)处的1,B中所有的1(分别位于[(1,1)(1,2),(2,2)]处),相对于A(0,0)处的偏置分别为[(1,0),(1,1),(2,1)]
对于矩阵A(1,1)处的1,B中所有的1(分别位于[(1,1)(1,2),(2,2)]处),相对于A(0,0)处的偏置分别为[(0,0),(0,1),(1,1)]
对于矩阵A(2,1)处的1,B中所有的1(分别位于[(1,1)(1,2),(2,2)]处),相对于A(0,0)处的偏置分别为[(-1,0),(-1,1),(0,2)]
统计偏置数组[(1,1)(1,2),(2,2)],[(1,0)(1,1),(2,1)],[(0,0),(0,1),(1,1)],[(-1,0),(-1,1),(0,2)],可发现(1,1)出现最多,是为3次。
int largestOverlap(vector<vector<int>>& A, vector<vector<int>>& B) {
int N = A.size();
int count[2*N][2*N];
memset(count,0,sizeof(count));
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
if (A[i][j] == 1)
for (int i2 = 0; i2 < N; ++i2)
for (int j2 = 0; j2 < N; ++j2)
if (B[i2][j2] == 1)
count[i-i2 +N][j-j2 +N] += 1;
int ret = 0;
for(int i=0;i<2*N;++i){
for(int j=0;j<2*N;++j){
ret = max(ret,count[i][j]);
}
}
return ret;
}
834. 树中距离之和
- 双向 LSTM
- scrapy回调函数传递参数
- python更新数据库脚本两种方法
- 使聊天机器人具有个性
- 遇到502错误,invalid request block size 解决方法
- python中json.loads,dumps,jsonify使用
- sqlalchemy和flask-sqlalchemy几种分页操作
- 一个 tflearn 情感分析小例子
- 前端js,后台python实现RSA非对称加密
- 运行mysql时,提示Table ‘performance_schema.session_variables’ doesn’t exist
- ODL应用开发之MD-SAL中级教程
- Sql参数是一个list的最佳实践
- MyBatis 配置输出日志,不输出SQL问题解决
- lombok让你提高代码整洁度的神器附教程及原理分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用Azure Functions玩转Serverless
- Best practice on when to use the wrapper class and primitive type in Java
- Flutter基础widgets教程-BottomNavigationBar篇
- 直播系统介绍
- Azure内容审查器之羞羞图审查
- Clickhouse简介和性能对比
- Clickhouse创建分布式表以及表引擎介绍
- Azure 内容审查器之文本审查
- Redis中String数据类型原理实现
- Clickhouse分布式集群搭建
- Redis过期策略以及淘汰机制
- 几行代码就可以轻松给你的程序加上进度条
- git禁止在master分支push和commit
- 记录一次mybatis缓存和事务传播行为导致ut挂的排查过程
- appium教程_3.启动appium-server