参见:link

第一题

两个长度相等数组,求最小的各元素平方差之和。

示例:

  1. 输入:[4, 3], [1, 2]
  2. 输出:8
  3. 解释:排序变为 [3,4], [1,2],然后 (3-1)^2+(4-2)^2=8

解法:100% AC

  • 两个数组分别排序,然后逐个计算平方差即可
  • 注意用 long,否则不能过全部样例

第二题

有 n 片瓜田,每片瓜田里种了 ki 个西瓜,在 ai 时成熟可摘,bi 之后会烂掉。每天最多采 v 个西瓜,求最多能采几个。

示例:

  1. 输入:n = 2, v = 3, [5, 1, 2], [3, 2, 3]
  2. 解释:k = [5, 3], a = [1, 2], b = [2, 3]
  3. 输出:8(第一天在第 1 个瓜田采 3,第二天在第 1 个瓜田采 2,在第 2 个瓜田采 1,第三天在第 2 个瓜田采 2

解法:只过了 10%(过了样例但提交之后一直 0%,最后干脆直接将数组 k 的所有西瓜数求和返回,过了 10%。。)

  • 先按成熟可摘的事件排序,然后枚举事件,把当前可以摘的放到一个优先队列,优先队列按照过期的时间排

第三题

给一个长为 n 的序列 A 和一个 k,生成一个序列 B。
1、如果 A[i - k] = 1,则 B[i] = 1
2、或者 A[i + k] = 1,则 B[i] = 1
3、否则 B[i] = 0
问,若给定序列 B 和 k,返回 A(如果有多个符合条件的,输出字典序最小的)

示例:

  1. 输入:B = 1011100k = 2
  2. 输出:A = 0010011

解法:100% AC,本题是要从 B 反推 A
将 A 初始化为全 2 的数组(不等于 0、1 即可)

  • 先遍历 B,如果 B[i]==0,则将没有下标越界的 A[i-k]A[i+k]0
  • 再遍历 B,如果 B[i]==1
    • 如果 i-k<0,则 A[i+k]=1
    • 如果 i+k>n,则 A[i-k]=1
    • 否则,下标 i-ki+k 都没有越界(下面的方法是为了字典序最小)
      • 如果 A[i-k] 已经等于 1,则令 A[i+k]=0
      • 否则,
        • 如果 A[i+k] != 0,则令 A[i-k]=1
        • 否则,令 A[i-k]=0A[i+k]=1

第四题

漂亮字符串:给定一个数字 k,如果字符串里每个字符出现的次数都是 k 的倍数,那么这个字符串是漂亮字符串。
给定字符串 s 和 k,求字典序不小于该字符串的漂亮字符串(如果有多个,取字典序最小的)。若找不到符合条件的,输出 -1。

  1. 输入:abcd, k = 2
  2. 输出:acac

解法:只过了 16%(就处置了下特殊条件,如果字符串 s 长度不是 k 的倍数,那么肯定不符合直接返回 -1;如果本身就是漂亮字符串,返回原字符串;剩下的一般情况下没处理)