科大讯飞笔试求教

求教各位大佬,以下代码还有什么优化空间呢?只能通过20%。

题目大意:

输入两个数(n:字符个数;q:可操作次数)和一个字符串(0和1组成)。操作是把0变成1

求 连续1的个数的平方 的和

例子:

6,1,100101 —— 输出10——对倒数第二位操作变成100111,得到1*1+3*3 = 10

10,2,0010011011 ——输出37 —— 对最后两个0操作变成0010111111,得到1*1+6*6 = 37

package main

import (
    "fmt"
)

func main() {
    var n,q int
    fmt.Scanf("%d %d",&n, &q)
    var str string
    fmt.Scanf("%s",&str)

    strByte := []byte(str)

    
    if q==0{
        fmt.Println(check(strByte)) 
        return
    }

    maxN := 0

    var helper func(int,int)
    helper = func(index, stay int){
        if index == n{
            maxN = max(maxN, check(strByte))
            return 
        }
        if stay > 0{// 还有要做的
            // 找到所有0,依次放入
            for i:=index;i<n;i++{
                if strByte[i]=='0'{
                    strByte[i] = '1'
                    helper(i+1,stay-1)
                    strByte[i] = '0'
                }
            }
        }else{
            helper(n,0)
        }
        // 计算全部的
    }

    helper(0,q)
    fmt.Println(maxN)

}
func check(nums []byte)int{
    total := 0
    index := 0
    for index<len(nums){
        l, r:=0, 0
        for index <len(nums) && nums[index]=='0'{
            index++
        }
        l = index
        for index <len(nums) && nums[index]=='1'{
            index++
        }
        r  = index
        total += (r-l)*(r-l)
    }
    return total
}

func max(a,b int)(int){
    if a>b{
        return a
    }
    return b
}

#科大讯飞##笔试##golang#
全部评论
现在讯飞笔试这么难了?我做那场炒鸡简单轻松全a,感觉你这个比我那回最后一题还难😂
1 回复 分享
发布于 08-30 22:05 黑龙江
我回溯也20%,换滑动窗口A了
1 回复 分享
发布于 08-30 22:21 新加坡
应该是贪心吧,尽可能的要让多出来的1把更多的1串在一起这样平方后加的更多,用滑动窗口来算怎么串1最划算
1 回复 分享
发布于 08-31 04:27 湖北
我回溯做的,也20%,最后没时间再想别的方法了
点赞 回复 分享
发布于 08-30 21:11 湖南
第二题该咋做啊,我时间复杂度是n方超了
点赞 回复 分享
发布于 08-30 21:19 辽宁
n方k好像可以解,枚举每个位置末尾全是1子串的长度。但是应该会超时
点赞 回复 分享
发布于 08-30 23:16 辽宁
第一题咋做
点赞 回复 分享
发布于 08-31 01:19 陕西
前缀和可以100%通过😂刚刚笔试完也是这道题
点赞 回复 分享
发布于 09-11 15:18 天津

相关推荐

10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-01 20:56
已编辑
百度一面1h(10.28)&nbsp;1.自我介绍&nbsp;2.项目介绍&nbsp;3.八股&nbsp;4.两数之和(map&nbsp;5.接受一个箭头函数作为参数,返回一个可多次执行的新函数(面试官说思路大致正确)&nbsp;百度二面1h(11.1)&nbsp;1.自我介绍&nbsp;2.项目难点?视频流格式,视频压缩做过吗?&nbsp;table,树形结构?&nbsp;3.typescript?用过哪些,和java的区别?&nbsp;4.讲讲tcp连接&nbsp;输入域名到显示页面过程&nbsp;5.cssom树?讲讲查找某个class元素的过程,如果有id,class等多个选择器,怎么进行匹配?&nbsp;6.网络安全?讲讲前端防御性编程?(蒙&nbsp;7.用户登陆的防御方式?中间人攻击怎么办?&nbsp;8.usecount...
AI牛可乐:哎呀,面试的感觉好像有点紧张呢,不过你已经很棒了,能坚持到二面已经很厉害了!👍牛可乐在这里给你加油打气哦!面试的内容听起来好专业,不过我相信你一定有自己的见解。悄悄问一下,面试的时候紧张吗?😊 关于你提到的技术问题,如果你愿意的话,我们可以一起探讨一下,比如那个“两数之和”的问题,你是怎么想的呢?或者,如果你现在有什么不太确定的地方,牛可乐可以帮你一起想想解决办法哦! 对了,如果你想私下聊聊,可以点击牛可乐的头像给我发私信哦,我们可以一起探讨更多求职的小秘密!💌 现在,你想聊聊哪个技术点呢?还是想先放松一下,聊点别的?牛可乐在这里等你哦!😉
查看12道真题和解析 牛客在线求职答疑中心
点赞 评论 收藏
分享
2 2 评论
分享
牛客网
牛客企业服务