LeetCode 第 18 场双周赛(188/587,前32%)

文章目录

    • 1. 比赛结果
    • 2. 题目
      • LeetCode 1331. 数组序号转换 easy
      • LeetCode 1328. 破坏回文串 medium
      • LeetCode 1329. 将矩阵按对角线排序 medium
      • LeetCode 1330. 翻转子数组得到最大的数组值 hard

1. 比赛结果

做出来了1, 2, 3题,第4题提交超时
在这里插入图片描述

在这里插入图片描述

2. 题目

LeetCode 1331. 数组序号转换 easy

题目链接
给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。

序号代表了一个元素有多大。序号编号的规则如下:

  • 序号从 1 开始编号。
  • 一个元素越大,那么序号越大。如果两个元素相等,那么它们的序号相同。
  • 每个数字的序号都应该尽可能地小。
示例 1:
输入:arr = [40,10,20,30]
输出:[4,1,2,3]
解释:40 是最大的元素。 10 是最小的元素。 20 是第二小的数字。 30 是第三小的数字。示例 2:
输入:arr = [100,100,100]
输出:[1,1,1]
解释:所有元素有相同的序号。示例 3:
输入:arr = [37,12,28,9,100,56,80,5,12]
输出:[5,3,4,2,8,6,7,1,3]提示:
0 <= arr.length <= 10^5
-10^9 <= arr[i] <= 10^9

解答:

class Solution {
public:vector<int> arrayRankTransform(vector<int>& arr) {multimap<int,int> m;for (int i = 0; i < arr.size(); ++i){m.insert(make_pair(arr[i],i));}int count = 0, prev = INT_MIN;for(auto it = m.begin(); it != m.end(); ++it){if(prev != it->first)//map有序,数值与前面的不相等,排名增加{count++;//排名prev = it->first;}arr[it->second] = count;//原来数的位置,写成排名}return arr;}
};

在这里插入图片描述

LeetCode 1328. 破坏回文串 medium

题目链接
给你一个回文字符串 palindrome ,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的字典序最小,且 不是 回文串。

请你返回结果字符串。如果无法做到,则返回一个空串。

示例 1:
输入:palindrome = "abccba"
输出:"aaccba"示例 2:
输入:palindrome = "a"
输出:""提示:
1 <= palindrome.length <= 1000
palindrome 只包含小写英文字母。

解题:

class Solution {
public:string breakPalindrome(string palindrome) {int i = 0, n = palindrome.size();if(n <= 1)return "";while(i < n && palindrome[i] <= 'a')i++;if(i == n)//全部为a{palindrome[n-1] = 'b';//最后一个改成breturn palindrome;}if(n%2==1 && i ==((n-1)/2))//奇数个字符,且找到的是中间的字符可以修改{i++;//去下一位找,修改中间的,还是回文串while(i < n && palindrome[i] <= 'a')i++;if(i == n){palindrome[n-1] = 'b';return palindrome;}   }palindrome[i] = 'a';return palindrome;}
};

在这里插入图片描述

LeetCode 1329. 将矩阵按对角线排序 medium

题目链接

给你一个 m * n 的整数矩阵 mat ,请你将同一条对角线上的元素(从左上到右下)按升序排序后,返回排好序的矩阵。

示例:
在这里插入图片描述

输入:mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
输出:[[1,1,1,1],[1,2,2,2],[1,2,3,3]]提示:
m == mat.length
n == mat[i].length
1 <= m, n <= 100
1 <= mat[i][j] <= 100

解题:

class Solution {
public:vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {int m = mat.size(), n = mat[0].size();int i = 0, x, y, k;vector<int> v;for( ; i < n; ++i){v.clear();//临时存储x = 0,y=i;//先把第一行开头的遍历掉while(x < m && y < n)//在范围内{v.push_back(mat[x][y]);x++,y++;//对角线移动}sort(v.begin(),v.end());//排序x = 0, y = i, k =0;while(x < m && y < n){mat[x][y] = v[k];//写回数组x++,y++,k++;}}for(i=1 ; i < m; ++i){v.clear();x = i,y=0;//第一列剩余的开头的遍历掉while(x < m && y < n){v.push_back(mat[x][y]);x++,y++;}sort(v.begin(),v.end());x = i, y = 0, k =0;while(x < m && y < n){mat[x][y] = v[k];x++,y++,k++;}}return mat;}
};

在这里插入图片描述

LeetCode 1330. 翻转子数组得到最大的数组值 hard

题目链接

给你一个整数数组 nums 。「 数组值」定义为所有满足 0 <= i < nums.length-1|nums[i]-nums[i+1]| 的和。

你可以选择给定数组的任意子数组,并将该子数组翻转。但你只能执行这个操作 一次

请你找到可行的最大 数组值 。

示例 1:
输入:nums = [2,3,1,5,4]
输出:10
解释:通过翻转子数组 [3,1,5] ,数组变成 [2,5,1,3,4] ,数组值为 10 。示例 2:
输入:nums = [2,4,9,24,2,1,10]
输出:68提示:
1 <= nums.length <= 3*10^4
-10^5 <= nums[i] <= 10^5

解题:

超时代码:(按照各种组合暴力求解,两端的变化才会改变目标值)

class Solution {
public:int maxValueAfterReverse(vector<int>& nums) {int i, j, n=nums.size(), val=0, maxval=INT_MIN, len;for(i = 0; i < n-1; i++)val += abs(nums[i]-nums[i+1]);for(len =2; len < n; ++len){for(i = 0; i+len < n; ++i){if(i == 0)maxval = max(maxval,val-abs(nums[i+len]-nums[i+len-1])+abs(nums[i+len]-nums[i]));else if(i+len == n)maxval = max(maxval,val-abs(nums[i]-nums[i-1])+abs(nums[i+len]-nums[i]));elsemaxval = max(maxval,val-abs(nums[i]-nums[i-1])-abs(nums[i+len]-nums[i+len-1])+abs(nums[i+len]-nums[i])+abs(nums[i+len-1]-nums[i-1]));}}return maxval;}
};

在这里插入图片描述
参考别人的解法:

变化的值 = 增加的值 abs(a[l−1]−a[r])+abs(a[l]−a[r+1])abs(a[l−1]−a[r])+abs(a[l]−a[r+1])abs(a[l1]a[r])+abs(a[l]a[r+1]) 减去原来的值 (abs(a[l]−a[l−1])+abs(a[r]−a[r+1]))(abs(a[l]−a[l−1])+abs(a[r]−a[r+1]))(abs(a[l]a[l1])+abs(a[r]a[r+1]))
增加的值:abs(a[l−1]−a[r])+abs(a[l]−a[r+1])=max{a[l−1]+a[l]−(a[r]+a[r+1]),a[l−1]−a[l]−(a[r]−a[r+1]),−a[l−1]+a[l]−(−a[r]+a[r+1]),−a[l−1]−a[l]−(−a[r]−a[r+1])}abs(a[l−1]−a[r])+abs(a[l]−a[r+1]) =\\ max\{\\ a[l - 1] + a[l] - (a[r] + a[r+1]) ,\\ a[l - 1] - a[l] - (a[r] - a[r + 1]),\\ -a[l - 1] + a[l] - (-a[r] + a[r + 1]),\\ -a[l - 1] - a[l] - (-a[r] - a[r + 1])\\ \}abs(a[l1]a[r])+abs(a[l]a[r+1])=max{a[l1]+a[l](a[r]+a[r+1]),a[l1]a[l](a[r]a[r+1]),a[l1]+a[l](a[r]+a[r+1]),a[l1]a[l](a[r]a[r+1])}
变化的值:
max{a[l−1]+a[l]−abs(a[l]−a[l−1])−(a[r]+a[r+1]+abs(a[r]−a[r+1])),a[l−1]−a[l]−abs(a[l]−a[l−1])−(a[r]−a[r+1]+abs(a[r]−a[r+1])),−a[l−1]+a[l]−abs(a[l]−a[l−1])−(−a[r]+a[r+1]+abs(a[r]−a[r+1])),−a[l−1]−a[l]−abs(a[l]−a[l−1])−(−a[r]−a[r+1]+abs(a[r]−a[r+1]))}max\{\\ a[l - 1] + a[l] - abs(a[l] - a[l - 1]) - (a[r] + a[r + 1] + abs(a[r] - a[r + 1])),\\ a[l - 1] - a[l] - abs(a[l] - a[l - 1]) - (a[r] - a[r + 1] + abs(a[r] - a[r + 1])),\\ -a[l - 1] + a[l] - abs(a[l] - a[l - 1]) - (-a[r] + a[r + 1] + abs(a[r] - a[r + 1])),\\ -a[l - 1] - a[l] - abs(a[l] - a[l - 1]) - (-a[r] - a[r + 1] + abs(a[r] - a[r + 1]))\\ \}max{a[l1]+a[l]abs(a[l]a[l1])(a[r]+a[r+1]+abs(a[r]a[r+1])),a[l1]a[l]abs(a[l]a[l1])(a[r]a[r+1]+abs(a[r]a[r+1])),a[l1]+a[l]abs(a[l]a[l1])(a[r]+a[r+1]+abs(a[r]a[r+1])),a[l1]a[l]abs(a[l]a[l1])(a[r]a[r+1]+abs(a[r]a[r+1]))}
一次遍历 求得变化的值前面部分的最大值,后半部分的最小值,做差就是变化的最大值。

class Solution {
public:int maxValueAfterReverse(vector<int>& nums) {int i, j, n = nums.size(), val = 0, maxval = 0;for(i = 0; i < n-1; i++)val += abs(nums[i]-nums[i+1]);if(n <= 2)return val;maxval = val;for(i = 0; i < n; ++i){if(i != n-1)maxval = max(maxval, val+abs(nums[0]-nums[i+1])-abs(nums[i]-nums[i+1]));//左边界0if(i != 0)maxval = max(maxval, val+abs(nums[i-1]-nums[n-1])-abs(nums[i]-nums[i-1]));//右边界n-1}int max1 = INT_MIN, min1 = INT_MAX;int max2 = INT_MIN, min2 = INT_MAX;int max3 = INT_MIN, min3 = INT_MAX;int max4 = INT_MIN, min4 = INT_MAX;for(i = 1; i < n; ++i){max1 = max(max1, nums[i-1]+nums[i]-abs(nums[i]-nums[i-1]));max2 = max(max2, nums[i-1]-nums[i]-abs(nums[i]-nums[i-1]));max3 = max(max3, -nums[i-1]+nums[i]-abs(nums[i]-nums[i-1]));max4 = max(max4, -nums[i-1]-nums[i]-abs(nums[i]-nums[i-1]));min1 = min(min1, nums[i-1]+nums[i]+abs(nums[i]-nums[i-1]));min2 = min(min2, nums[i-1]-nums[i]+abs(nums[i]-nums[i-1]));min3 = min(min3, -nums[i-1]+nums[i]+abs(nums[i]-nums[i-1]));min4 = min(min4, -nums[i-1]-nums[i]+abs(nums[i]-nums[i-1]));}int maxdiff = max(INT_MIN, max(max1-min1, max(max2-min2, max(max3-min3, max4-min4))));maxval = max(maxval, val+maxdiff);return maxval;}
};

在这里插入图片描述

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

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

相关文章

Spring Cloud实战小贴士:Zuul统一异常处理(一)

在上一篇《Spring Cloud源码分析&#xff08;四&#xff09;Zuul&#xff1a;核心过滤器》一文中&#xff0c;我们详细介绍了Spring Cloud Zuul中自己实现的一些核心过滤器&#xff0c;以及这些过滤器在请求生命周期中的不同作用。我们会发现在这些核心过滤器中并没有实现error…

ACL’22 | 为大模型定制的数据增强方法FlipDA,屠榜六大NLU 数据集

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

技术动态 | 面向可解释性的知识图谱推理研究

导读&#xff1a;本次演讲的主题是面向可解释性的知识图谱推理研究&#xff0c;报告分为以下 5 个部分&#xff1a;研究背景前沿进展研究动机近期研究研究展望分享嘉宾&#xff5c;万国佳 武汉大学 计算机学院 博士后编辑整理&#xff5c;xiaomei出品平台&#xff5c;DataFunTa…

LeetCode 1332. 删除回文子序列

1. 题目 给你一个字符串 s&#xff0c;它仅由字母 ‘a’ 和 ‘b’ 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。 返回删除给定字符串中所有字符&#xff08;字符串为空&#xff09;的最小删除次数。 「子序列」定义&#xff1a;如果一个字符串可以通过删除原字符…

Spring Cloud源码分析(四)Zuul:核心过滤器

通过之前发布的《Spring Cloud构建微服务架构&#xff08;五&#xff09;服务网关》一文&#xff0c;相信大家对于Spring Cloud Zuul已经有了一个基础的认识。通过前文的介绍&#xff0c;我们对于Zuul的第一印象通常是这样的&#xff1a;它包含了对请求的路由和过滤两个功能&am…

预训练再次跨界!百度提出ERNIE-GeoL,地理位置-语言联合预训练!

源 | 百度NLP本文介绍『文心大模型』的一项最新工作&#xff1a;“地理位置-语言”预训练模型ERNIE-GeoL。论文链接&#xff1a;https://arxiv.org/abs/2203.09127实践中的观察近年来&#xff0c;预训练模型在自然语言处理、视觉等多个领域都取得了显著效果。基于预训练模型&am…

LeetCode 1333. 餐厅过滤器(Lambda排序)

1. 题目 给你一个餐馆信息数组 restaurants&#xff0c;其中 restaurants[i] [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息。 其中素食者友好过滤器 veganFriendly 的值可以为 true 或者 false&#xff0c;如果为 true …

Spring Cloud实战小贴士:Zuul处理Cookie和重定向

由于我们在之前所有的入门教程中&#xff0c;对于HTTP请求都采用了简单的接口实现。而实际使用过程中&#xff0c;我们的HTTP请求要复杂的多&#xff0c;比如当我们将Spring Cloud Zuul作为API网关接入网站类应用时&#xff0c;往往都会碰到下面这两个非常常见的问题&#xff1…

论文浅尝 | Language Models (Mostly) Know What They Know

笔记整理&#xff1a;程思源、梁孝转&#xff0c;浙江大学在读硕士&#xff0c;研究方向为知识图谱的表示学习&#xff0c;自然语言处理&#xff0c;预训练对于一个语言模型&#xff0c;我们最终希望得到一个“诚实”的人工智能系统&#xff0c;即语言模型需要准确并且忠实地评…

百度AI技术盛宴来了!大咖齐聚解读CV/NLP/跨模态大模型技术!

随着人工智能步入工业大生产阶段&#xff0c;AI大模型正在加速走出实验室&#xff0c;在全球范围内逐步实现产业落地应用的突破。自2020年至今&#xff0c;越来越多的科技巨头和科研机构参与其中。去年12月&#xff0c;百度发布了全球首个知识增强千亿级大模型——鹏城-百度文心…

Spring Cloud实战小贴士:健康检查

今天在博客的交流区收到一条不错的问题&#xff0c;拿出来给大家分享一下。具体问题如下&#xff1a; 因为项目里面用到了redis集群&#xff0c;但并不是用spring boot的配置方式&#xff0c;启动后项目健康检查老是检查redis的时候状态为down&#xff0c;导致注册到eureka后项…

恕我直言,你的模型可能并没看懂 prompt 在说啥

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

开源开放 | 区域供冷供热系统及空调系统知识图谱

OpenKG地址&#xff1a;http://openkg.cn/dataset/less开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&#xff1a;浙江大学&#xff08;赵阳&#xff0c;李婷婷&#xff0c;章超波&#xff09;1、背景区域供冷供热系统及空调系统领域涉及知…

LeetCode 1334. 阈值距离内邻居最少的城市(最短路径Dijkstra)

1. 题目 有 n 个城市&#xff0c;按从 0 到 n-1 编号。给你一个边数组 edges&#xff0c;其中 edges[i] [fromi, toi, weighti] 代表 fromi 和 toi 两个城市之间的双向加权边&#xff0c;距离阈值是一个整数 distanceThreshold。 返回能通过某些路径到达其他城市数目最少、且…

五个同事想计算他们的平均工资,但公司不让吐露薪资,如何实现?

源 | Xpecya知乎大家好我是卖萌酱。昨天在知乎上刷到一个很有意思的问题&#xff1a;“五个同事决定计算他们的平均工资&#xff0c;在大家互相不告诉薪水的情况下&#xff0c;如何才能做到这一点&#xff1f;”。确实互联网公司是不让员工讨论薪资的&#xff0c;但通过一些神操…

基于Consul的分布式信号量实现

本文将继续讨论基于Consul的分布式锁实现。信号量是我们在实现并发控制时会经常使用的手段&#xff0c;主要用来限制同时并发线程或进程的数量&#xff0c;比如&#xff1a;Zuul默认情况下就使用信号量来限制每个路由的并发数&#xff0c;以实现不同路由间的资源隔离。 信号量(…

图谱实战 | 图视角下的信息抽取技术研究

导读&#xff1a;本次分享题目为《图视角下的信息抽取技术研究》&#xff0c;主要介绍&#xff1a;研究背景和意义国内外研究现状研究目标与内容主要成果与创新之处完成项目及发表论文情况分享嘉宾&#xff5c;郁博文博士 达摩院 算法专家编辑整理&#xff5c;王露出品平台&…

LeetCode 1335. 工作计划的最低难度(DP)

1. 题目 你需要制定一份 d 天的工作计划表。工作之间存在依赖&#xff0c;要想执行第 i 项工作&#xff0c;你必须完成全部 j 项工作&#xff08; 0 < j < i&#xff09;。 你每天 至少 需要完成一项任务。工作计划的总难度是这 d 天每一天的难度之和&#xff0c;而一天…

CCKS-面向数字商务的知识图谱比赛重磅上线,奖金等你来拿!

​CCKS 2022面向数字商务的知识图谱评测赛题介绍阿里巴巴商品数据规模庞大&#xff0c;商品知识图谱为海量异构的商品数据的组织、管理和利用提供了有效的方式。商品数据模态丰富&#xff0c;动态性高&#xff0c;数据存在噪声&#xff0c;这些都对商品的认知和理解带来了巨大挑…

基于Consul的分布式锁实现

我们在构建分布式系统的时候&#xff0c;经常需要控制对共享资源的互斥访问。这个时候我们就涉及到分布式锁&#xff08;也称为全局锁&#xff09;的实现&#xff0c;基于目前的各种工具&#xff0c;我们已经有了大量的实现方式&#xff0c;比如&#xff1a;基于Redis的实现、基…