科大讯飞笔试求教
求教各位大佬,以下代码还有什么优化空间呢?只能通过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#