返回信息流
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #8475785同步于 2025/8/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖
文远知行 笔试编程题 第一题错哪了!!!!这题还能咋优化,为
IWhisper#289
2025/8/24镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
给T,代表T组输入。每组第一行一个字母,代表当前红绿灯的颜色,只能是r,g,y。每组第二行一个字符串,代表红绿灯变化规律,比如ryyg则变化循环是:ryyg ryyg ... 输出当前红绿灯右侧第一个g的距离。<br>这题输入输出的问题还是时间复杂度还能优化?<br>时间复杂度已经为O(T * N) N=len(str), N的范围是1.5 * 10的5次方, t最大为100. 为什么多次提交代码在线上运行时还是出现运行超时且空间消耗为0kB的情况?<br>真的服了!<br>```golang<br>package main<br><br><br>import (<br> "fmt"<br>)<br><br><br>func main() {<br> var t int<br> fmt.Scan(&t)<br> for i := 0; i < t; i++ {<br> var ch byte<br> fmt.Scanf("%c", &ch)<br> var str string<br> fmt.Scan(&str)<br> if ch == 'g' {<br> fmt.Printf("0\n")<br> } else {<br> n := len(str)<br> ans := n + 1<br> start := -1<br> leftGIdx := -1<br> for i := 0; i < n; i++ {<br> if str[i] == ch {<br> start = i<br> }<br> if str[i] == 'g' {<br> if start == -1 {<br> leftGIdx = i<br> } else {<br> if i - start < ans {<br> ans = i - start<br> }<br> }<br> }<br> }<br> if ans == n + 1 {<br> ans = n - start + leftGIdx<br> }<br> fmt.Printf("%d\n", ans)<br> }<br> }<br> return<br>}<br>```<br>