报名参加
本次比赛代码都不是最佳解法,请勿模仿。
第一题
简单题 ,wa了两次。。。
func maximumTime(time string) string {
var ans = strings.Builder{}
for i := 0; i < len(time); i++ {
if time[i]=='?'{
switch i {
case 0:
if time[1]!='?' && time[1] >'3'{
ans.WriteByte('1')
}else {
ans.WriteByte('2')
}
case 1:
if ans.String()[0]<'2'{
ans.WriteByte('9')
}else {
ans.WriteByte('3')
}
case 3:
ans.WriteByte('5')
case 4:
ans.WriteByte('9')
}
}else {
ans.WriteByte(time[i])
}
}
return ans.String()
}
第二题
‘a~'z’都模拟一遍 ,就这题。。wa了三次,太了。
func min(a, b int) int {
if a<b{
return a
}
return b
}
func minCharacters(a string, b string) int {
ab,bb := make([]int, 26),make([]int, 26)
for i := 0; i < len(a); i++ {
ab[a[i]-'a']++
}
for i := 0; i < len(b); i++ {
bb[b[i]-'a']++
}
ans := min(operator(ab,bb), operator(bb,ab))
max:=0
for i := 0; i < 26; i++ {
ab[i]+=bb[i]
}
for i := 0; i < 26; i++ {
if max < ab[i]{
max = ab[i]
}
}
// fmt.Println(max)
return min(ans, len(a)+len(b)-max)
}
func operator(a, b []int) int {
ans :=math.MaxInt32
for i := 1; i < 26; i++ {
temp :=0
for j := 0; j < i; j++ {
temp +=a[j]
}
for j := i; j < 26; j++ {
temp +=b[j]
}
if temp < ans{
ans = temp
}
}
return ans
}
第三题
类似前缀和的思想求出矩阵前缀异或,再排序取第k个(这边可以用快排的partition优化复杂度,比赛就没想那么多了)
func kthLargestValue(matrix [][]int, k int) int {
var xor = make([][]int, len(matrix))
for i := 0; i < len(matrix); i++ {
xor[i] = make([]int, len(matrix[0]))
}
temp := 0
for i := 0; i < len(matrix[0]); i++ {
temp ^= matrix[0][i]
xor[0][i] = temp
}
for i := 1; i < len(matrix); i++ {
for j := 0; j < len(matrix[0]); j++ {
if j==0 {
xor[i][0]=xor[i-1][0]^matrix[i][0]
}else {
xor[i][j] = xor[i-1][j]^xor[i][j-1]^xor[i-1][j-1]^matrix[i][j]
}
}
}
var ans = make([]int, len(matrix)*len(matrix[0]))
index :=0
for i := 0; i < len(xor); i++ {
for j := 0; j < len(xor[i]); j++ {
ans[index] = xor[i][j]
index++
}
}
sort.Ints(ans)
return ans[len(ans)-k]
}
第四题
脑筋急转弯,观察得知(比较难解释,就类似1+2+3。。。+n,不够的话再把最右边看成墙壁,再计算需要补多少个底座)
func minimumBoxes(n int) int {
i := 1
total := 1
for total+(i+1)*(i+2)/2 < n {
i++
total += (i + 1) * (i) / 2
}
n = n-total
temp :=int(math.Sqrt(float64(n*2)))
if temp*(temp+1)/2 >= n{
return (i+1)*i/2+temp
}else {
return (i+1)*i/2+temp+1
}
}
最后排名: