参见:link
第一题
两个长度相等数组,求最小的各元素平方差之和。
示例:
输入:[4, 3], [1, 2]输出:8解释:排序变为 [3,4], [1,2],然后 (3-1)^2+(4-2)^2=8
解法:100% AC
- 两个数组分别排序,然后逐个计算平方差即可
- 注意用
long,否则不能过全部样例
第二题
有 n 片瓜田,每片瓜田里种了 ki 个西瓜,在 ai 时成熟可摘,bi 之后会烂掉。每天最多采 v 个西瓜,求最多能采几个。
示例:
输入:n = 2, v = 3, [5, 1, 2], [3, 2, 3]解释:k = [5, 3], a = [1, 2], b = [2, 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(如果有多个符合条件的,输出字典序最小的)
示例:
输入:B = 1011100,k = 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-k和i+k都没有越界(下面的方法是为了字典序最小)- 如果
A[i-k]已经等于 1,则令A[i+k]=0 - 否则,
- 如果
A[i+k] != 0,则令A[i-k]=1 - 否则,令
A[i-k]=0,A[i+k]=1
- 如果
- 如果
- 如果
第四题
漂亮字符串:给定一个数字 k,如果字符串里每个字符出现的次数都是 k 的倍数,那么这个字符串是漂亮字符串。
给定字符串 s 和 k,求字典序不小于该字符串的漂亮字符串(如果有多个,取字典序最小的)。若找不到符合条件的,输出 -1。
输入:abcd, k = 2输出:acac
解法:只过了 16%(就处置了下特殊条件,如果字符串 s 长度不是 k 的倍数,那么肯定不符合直接返回 -1;如果本身就是漂亮字符串,返回原字符串;剩下的一般情况下没处理)
