2026-08-16:分数验证器。用go语言,初始时分数和计数都为 0。按从左到右的顺序处理事件列表:如果当前项是数字字符串“0”“1”“2”“3

网易专栏1周前发布 nxnqh
33 0 0

🤖 AI总结

主题

实现分数验证器的算法与代码示例。

摘要

本文介绍了分数验证器的实现,通过遍历事件列表按规则更新分数和计数,并在计数达到10时停止,附有多种语言代码示例。

关键信息

  • 1 按规则处理事件并累加分数或计数。
  • 2 计数达到10时提前终止。
  • 3 提供Go、Python、C++代码。

2026-08-16:分数验证器。用go语言,初始时分数和计数都为 0。按从左到右的顺序处理事件列表:如果当前项是数字字符串“0”“1”“2”“3”“4”或“6”,就把对应数字加到分数上;如果是“W”,只把计数加 1,分数不变;如果是“WD”或“NB”,只把分数加 1,计数不变。每处理完一项后检查:如果已经处理到列表末尾,或者计数已经达到 10,就立即停止,不再处理后续内容。最后返回两个整数,依次表示最终分数和最终计数。

1 <= events.length <= 1000。

events[i] 是 “0”、”1″、”2″、”3″、”4″、”6″、”W”、”WD” 或 “NB” 之一。

输入: events = [“1″,”4″,”W”,”6″,”WD”]。

输出: [12,1]。

解释:

事件

得分

计数器

“1”

1

0

“4”

5

0

“W”

5

1

“6”

11

1

“WD”

12

1

最终结果:[12, 1]。

题目来自力扣3921。

处理过程详述

1.初始化状态
一开始,总得分score为 0,计数器counter为 0。这两个变量用来记录当前累计的结果。

  • 2.从左到右逐个处理事件
    程序会按顺序读取events数组中的每一个字符串元素,对每个元素执行相应的操作。

  • 3.判断当前事件类型并更新状态
    对于当前事件字符串,有三种可能的情况:

    当前事件是"W"
    表示一次计分前的“警告”或“宽球”事件。此时只把计数器counter加 1,总得分score保持不变。
    加完后会立即检查:如果counter已经等于 10,就马上停止处理,不再继续看后面的任何事件。

  • 当前事件长度大于 1,即"WD""NB"
    这两种事件都表示额外加 1 分。此时只把总得分score加 1,计数器counter保持不变。
    因为计数器没有变化,所以不可能在这一步达到 10,也就不需要额外检查停止条件。

  • 当前事件是单个数字字符,即"0""1""2""3""4""6"之一
    表示正常得分事件。此时把该数字字符转换成对应的整数值,加到总得分score上。
    计数器counter保持不变。

    4.循环继续或提前结束
    如果当前事件是"W"且计数器达到 10,循环会提前结束。
    否则,继续处理下一个事件,直到所有事件都处理完。

    5.返回最终结果
    循环结束后,把最终的scorecounter组合成一个长度为 2 的整数数组返回,第一个元素是总得分,第二个元素是计数器值。

    示例走查

    以输入events = ["1","4","W","6","WD"]为例:

    • 初始:score = 0counter = 0

  • • 处理"1":数字 1,score = 0 + 1 = 1

  • • 处理"4":数字 4,score = 1 + 4 = 5

  • • 处理"W":计数器加 1,counter = 1,未达到 10,继续

  • • 处理"6":数字 6,score = 5 + 6 = 11

  • • 处理"WD":长度大于 1,score = 11 + 1 = 12

  • • 所有事件处理完毕,返回[12, 1]

    复杂度分析

    时间复杂度
    最坏情况下需要遍历整个events数组一次。每个事件只进行常数次判断和简单加法操作,因此总时间复杂度为 O(n),其中 n 是events的长度。

  • 额外空间复杂度
    整个过程中只使用了两个整数变量scorecounter,以及最终返回的固定长度数组。这些空间都不随输入规模增长,所以额外空间复杂度为 O(1)。

    Go完整代码如下:

    package main

    import (
    "fmt"
    )

    func scoreValidator(events []string) []int {
    score, counter := 0, 0

    for _, s := range events {
    if s == "W" {
    counter++
    if counter == 10 {
    break
    }
    } else if len(s) > 1 { // "WD" "NB"
    score++
    } else { // 数字
    score += int(s[0] - '0')
    }
    }

    return []int{score, counter}
    }

    func main() {
    events := []string{"1", "4", "W", "6", "WD"}
    result := scoreValidator(events)
    fmt.Println(result)
    }

    2026-08-16:分数验证器。用go语言,初始时分数和计数都为 0。按从左到右的顺序处理事件列表:如果当前项是数字字符串“0”“1”“2”“3

    Python完整代码如下:

    # -*-coding:utf-8-*-

    def score_validator(events):
    score = 0
    counter = 0

    for s in events:
    if s == "W":
    counter += 1
    if counter == 10:
    break
    elif len(s) > 1: # "WD" 或 "NB"
    score += 1
    else: # 单个数字字符串
    score += int(s)

    return [score, counter]

    if __name__ == "__main__":
    events = ["1", "4", "W", "6", "WD"]
    result = score_validator(events)
    print(result)

    2026-08-16:分数验证器。用go语言,初始时分数和计数都为 0。按从左到右的顺序处理事件列表:如果当前项是数字字符串“0”“1”“2”“3

    C++完整代码如下:

      
    



    std::vector scoreValidator(const std::vector string >& events) {
    int score = 0 ;
    int counter = 0 ;

    for ( const std:: string & s : events) {
    if (s == "W" ) {
    counter++;
    if (counter == 10 ) {
    break ;
    }
    } else if (s.length() > 1 ) { // "WD" 或 "NB"
    score++;
    } else { // 单个数字字符
    score += s[ 0 ] - '0' ;
    }
    }

    return {score, counter};
    }

    int main() {
    std::vector string > events = { "1" , "4" , "W" , "6" , "WD" };
    std::vector< int > result = scoreValidator(events);
    std::cout << "[" << result[ 0 ] << ", " << result[ 1 ] << "]" << std::endl;
    return 0 ;
    }

    2026-08-16:分数验证器。用go语言,初始时分数和计数都为 0。按从左到右的顺序处理事件列表:如果当前项是数字字符串“0”“1”“2”“3

    我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

    © 版权声明

    相关文章