[杨小白]_leetcode_力扣_第 321 场周赛-第一、二题

95 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

前言

小白算法比较菜,希望能激励我每日更新,从leetcode第一题开始,2022年目标1900分,现在1806!!

力扣第 321 场周赛-力扣

第 321 场周赛

周日打周赛的人都不多了,之前周赛都有6000来人打,可能现在秋招结束了吧,都快跌破5000了。

image.png

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.结束

image.png

这次四题都不算难,手速场,涨了不少,能knight了,哈哈哈。