文章目录

  • 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[l−1]−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[l−1])+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[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])}
变化的值:
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[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]))}
一次遍历 求得变化的值前面部分的最大值,后半部分的最小值,做差就是变化的最大值。

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;}
};

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

  1. LeetCode第45场双周赛-解题报告

    LeetCode第45场双周赛-解题报告 A. 唯一元素的和 原题链接 https://leetcode-cn.com/problems/sum-of-unique-elements/ 解题思路 因为 ...

  2. Leetcode 第 69 场双周赛记录

    Leetcode 第 69 场双周赛记录 1.第一题 5960. 将标题首字母大写 难度:easy 给你一个字符串 title ,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母.请你按以 ...

  3. LeetCode 第 30 场双周赛(477/2545,前18.7%,第2次全部通过)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode 5177. 转变日期格式 easy 2. LeetCode 5445. 子数组和排序后的区间和 medium 3. LeetCode 54 ...

  4. LeetCode 第 31 场双周赛(273/2767,前9.87%,第3次全部通过)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode 5456. 在区间范围内统计奇数数目 easy 2. LeetCode 5457. 和为奇数的子数组数目 medium 3. LeetCo ...

  5. LeetCode 第 26 场双周赛(363/1971,前18.4%)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode 5396. 连续字符 easy 2. LeetCode 5397. 最简分数 medium 3. LeetCode 5398. 统计二叉树 ...

  6. LeetCode 第 36 场双周赛(304/2204,前13.8%)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode 5515. 设计停车系统 easy 2. LeetCode 5516. 警告一小时内使用相同员工卡大于等于三次的人 medium 3. L ...

  7. LeetCode 第 35 场双周赛(216/2839,前7.61%)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode 5503. 所有奇数长度子数组的和 easy 2. LeetCode 5505. 所有排列中的最大和 medium 3. LeetCode ...

  8. LeetCode 第 33 场双周赛(511/3304,前15.5%,第4次全部通过)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode 5479. 千位分隔数 easy 2. LeetCode 5480. 可以到达所有点的最少点数目 medium 3. LeetCode 5 ...

  9. LeetCode 第 21 场双周赛(779/1913,前40.7%)

    文章目录 1. 比赛结果 2. 题目 LeetCode 5336. 上升下降字符串 easy LeetCode 5337. 每个元音包含偶数次的最长子字符串 medium LeetCode 5338. ...

最新文章

  1. Batch Normalization深入理解
  2. Python :集合推导式和字典推导式
  3. nginx phase handler的原理和选择
  4. 一条SQL更新语句是如何执行的?
  5. js时间-价格-排序案例____冒泡排序实例
  6. 一年级学python_你是如何自学 Python 的?
  7. SHELL编写NGINX自动部署脚本
  8. wordpress发布文章错误:此响应不是合法的JSON响应
  9. 抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题
  10. 夜间灯光数据dn值_黑夜给了我黑色的眼睛——全球夜间灯光数据分析
  11. Retrofit 框架详解和使用
  12. 国内哪家公司做网站最好?
  13. 高防服务器有哪些优势
  14. return next(val for val in obj if safe_isfinite(val)) StopIteravtion报错解决方法
  15. 85. 如何用 OPA5 编写测试用例来测试用户输入文本的功能
  16. php 无限子站cms,PHP整理CMS无限层级目录(毗邻目录模式)
  17. EricChu的雅思之路——2020雅思A类考试切身体会\自学备考建议\考试完整流程(最详细版请耐心阅读)
  18. 【论文】Learning RoI Transformer for Oriented Object Detection in Aerial Images
  19. VMware安装tools
  20. Caused by: java.lang.NoSuchMethodException:

热门文章

  1. 【设计模式 05】工厂方法模式
  2. ajax当页post请求,tag落地页--通过ajax-post请求数据
  3. python继承属性_Python中的属性继承问题
  4. kernel移植——从三星官方内核开始移植
  5. Vim直接打开Tampermonkey网址的方法。
  6. Python--递归
  7. Nginx 作为 WebSockets 代理
  8. ViewPager+Fragment,Fragment会预加载的问题
  9. java 1.7 新特性
  10. Centos或者Redhet开通telnet