LeetCode Weekly Contest 243
这是对 LeetCode 第243场周赛的简单讲解和评论。
以下会包括对Leetcode周赛 243的每一题的题解,代码,难度分析,题目类型,以及一些个人对这题的看法等,希望读者们喜欢!
💡注意 : 题解并不一定都是最优解(代码以pass 了 LeetCode 的 Oline Judge 为准),文章初衷是给读者们提供一定的想法和问题的解决方案
- [Check if Word Equals Summation of Two Words
- Maximum Value after Insertion
- Process Tasks Using Servers
- Minimum Skips to Arrive at Meeting On Time
前言 : 参加Contest 的好处
- 每周抽点时间去练习和学习新的题目这对于个人的编程能力与问题解决能力都有很大的帮助
- 在规定的时间内解决一定的题目,这和真实的OA (Online Assessment) 或者 Onsite 面试是一样的,可以把它当作一个很好的 Mock 练习机会
- 当你有碰到做不出的题目的时候,你能知道自己的弱项在哪里,然后可以根据这进行加强和练习,比赛是一面给自己的镜子
对本场比赛的一些看法
本场比赛难度相对比较正常,都是比较常规的题目,第三题稍微有点难度需要一点思考
1880. 简单的暴力签到题1881. 一道贪心题目1882. 一道用两个Heap的模拟题目,需要进行一点简单的优化1883.比较难的DP 题目
1881 Maximum Value after Insertion
题意:
给一个字串符形式的数字s,我们现在要把数字x insert进s,返回使其最大的数字。s 可以以负数的形式出现
💡代码:
思路:
- 首先我们要看一下这个字串符是负数还是整数,然后用贪心发把x给insert进去
- 如果是负数的话,我们想要使数字部分越小越好
- 如果是正数的话,我们想要使数字部分越大越好
- 越大越好 :当我们遇到一个digit 比x小的时候我们就在这位置把x insert进去
- 越小越好 :当我们遇到一个digit 比x大的时候我们就在这位置把x insert进去
💡代码:
class Solution {
public String maxValue(String s, int x) {
boolean neg = (s.charAt(0) == '-') ? true : false;
String res = s + x;//如果找不到x insert的地方,我们insert在最后面,所以res 的default 值是 s+x
//如果负数的话,i 从 1开始
for (int i = neg ? 1 : 0; i < s.length(); i++) {
int digit = s.charAt(i) - '0';
if (neg) {
if (x < digit) {
res = s.substring(0, i) + x + s.substring(i);
break;
}
} else {
if (x > digit) {
res = s.substring(0, i) + x + s.substring(i);
break;
}
}
}
return res;
}
}
空间复杂度和时间复杂度:
- 时间复杂度:O(n),排序
- 空间复杂度:O(1)