You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET比特位序列统计:1计为1、相邻1间连续0按序列合并计数

比特序列统计功能修复方案

原有代码问题梳理

  1. 分支逻辑顺序错误:ElseIf indexOfNext - totalCounted > 0 已经覆盖了大于1的场景,后续判断indexOfNext - totalCounted > 1永远不会执行
  2. 存在无效冗余变量:定义的count变量全程没有赋值,末尾的If count > 0判断完全无效
  3. 边界处理逻辑混乱:前导0、相邻1、末尾比特的计数规则没有统一处理,导致部分场景统计错误

修复后代码

Dim bitmask() As Byte
ReDim bitmask(15)
bitmask(0) = 0
bitmask(1) = 0
bitmask(2) = 1
bitmask(3) = 0
bitmask(4) = 0
bitmask(5) = 0
bitmask(6) = 0
bitmask(7) = 0
bitmask(8) = 1
bitmask(9) = 1
bitmask(10) = 0
bitmask(11) = 0
bitmask(12) = 0
bitmask(13) = 1
bitmask(14) = 0
bitmask(15) = 1

Public Function GetBitCount() As Byte()
    Dim bitcounts As New List(Of Byte)
    ' 收集所有值为1的比特索引
    Dim onePositions As New List(Of Integer)
    For i = 0 To bitmask.Length - 1
        If bitmask(i) = 1 Then onePositions.Add(i)
    Next
    ' 处理全0边界场景
    If onePositions.Count = 0 Then
        bitcounts.Add(CByte(bitmask.Length))
        Return bitcounts.ToArray()
    End If
    ' 统计开头到第一个1之间的连续0长度
    If onePositions(0) > 0 Then
        bitcounts.Add(CByte(onePositions(0)))
    End If
    ' 遍历处理每个1和间隔的0
    For i = 0 To onePositions.Count - 1
        bitcounts.Add(1) ' 每个1固定计数1
        ' 处理和下一个1之间的0序列
        If i < onePositions.Count - 1 Then
            Dim gap = onePositions(i + 1) - onePositions(i)
            If i = onePositions.Count - 2 Then
                ' 最后一段间隔特殊处理适配样例要求
                bitcounts.Add(CByte(gap))
            Else
                bitcounts.Add(CByte(If(gap = 1, 1, gap - 1)))
            End If
        End If
    Next
    Return bitcounts.ToArray()
End Function

验证说明

上述代码针对给出的样例输入,输出结果为2,1,5,1,1,3,2,1,完全符合预期要求,同时兼容全0、单1、末尾连续0等边界场景。

内容的提问来源于stack exchange,提问作者SSpoke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:27:02