开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
前言
小白算法比较菜,希望能激励我每日更新,从leetcode第一题开始,2022年目标1900分,现在1806!!
力扣第 321 场周赛-力扣
第 321 场周赛
周日打周赛的人都不多了,之前周赛都有6000来人打,可能现在秋招结束了吧,都快跌破5000了。
2485. 找出中枢整数
给你一个正整数 n ,找出满足下述条件的 中枢整数 x :
1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。 返回中枢整数 x 。如果不存在中枢整数,则返回 -1 。题目保证对于给定的输入,至多存在一个中枢整数。
示例1:
- 输入: n = 8
- 输出: 6
- 解释: 6 是中枢整数,因为 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21 。
示例 2:
- 输入: n = 1
- 输出: 1
- 解释: 1 是中枢整数,因为 1 = 1 。
示例 3:
- 输入: n = 4
- 输出: -1
- 解释: 可以证明不存在满足题目要求的整数。
代码
O(n)算法,简单易懂。貌似好像有O(1)的数学解法。
class Solution {
public int pivotInteger(int n) {
for (int i = 1; i <= n; i++) {
int a = (1 + i) * i / 2;
int b = (i + n) * (n - i + 1) / 2;
if (a == b) {
return i;
}
}
return -1;
}
}
2486. 追加字符以获得子序列
给你两个仅由小写英文字母组成的字符串 s 和 t 。
现在需要通过向 s 末尾追加字符的方式使 t 变成 s 的一个 子序列 ,返回需要追加的最少字符数。
子序列是一个可以由其他字符串删除部分(或不删除)字符但不改变剩下字符顺序得到的字符串。
示例1:
- 输入:s = "coaching", t = "coding"
- 输出:4
- 解释:向 s 末尾追加字符串 "ding" ,s = "coachingding" 。
- 现在,t 是 s ("coachingding") 的一个子序列。
- 可以证明向 s 末尾追加任何 3 个字符都无法使 t 成为 s 的一个子序列。
示例 2:
输入: s = "abcde", t = "a"
输出: 0
解释: t 已经是 s ("abcde") 的一个子序列。
示例 3:
- 输入:s = "z", t = "abcde"
- 输出:5
- 解释:向 s 末尾追加字符串 "abcde" ,s = "zabcde" 。
- 现在,t 是 s ("zabcde") 的一个子序列。
- 可以证明向 s 末尾追加任何 4 个字符都无法使 t 成为 s 的一个子序列。
代码
经典的双指针,去s里面找能匹配到t的,将s遍历完,t遍历到index,剩下的就是需要添加的。
class Solution {
public int appendCharacters(String s, String t) {
int index = 0;
int i = 0;
while (i < s.length() && index < t.length()) {
if (s.charAt(i) == t.charAt(index)) {
i++;
index++;
}else {
i++;
}
}
if (index == t.length()) {
return 0;
}
return t.length() - index;
}
}
3.结束
这次四题都不算难,手速场,涨了不少,能knight了,哈哈哈。