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

基于二分查找统计元素出现次数的流程图正确性咨询

流程图绘制优化建议

首先先明确你这段binary_occurences函数的完整逻辑顺序,按逻辑分段绘制就可以避免混乱:

def binary_occurences(arr, target):
    start = 0
    end = len(arr)-1
    placement = -1
    occurence = 0

    while start <= end:
        center = (start + end)//2
        if target == arr[center]:
          placement = center
          end = center - 1
        elif target < arr[center]:
            end = center - 1
        else:
            start = center + 1

    if placement == -1:
        return 'your target element is not in the list'
    else:
        while (placement < len(arr) and arr[placement] == target):
            placement += 1
            occurence += 1

    print(f"Element {target} occurs {occurence} times")

核心逻辑分段

你可以把逻辑拆成4个独立部分分别绘制,再用箭头串联:

  • 初始化阶段:接收arr、target两个入参,给start、end、placement、occurence四个变量赋初始值
  • 左边界查找循环(第一个while):
    • 入口为start <= end判断,不满足条件直接跳出循环到下一个阶段
    • 循环体内先计算中点center,再做三层分支判断,对应不同的变量更新逻辑,每次变量更新完成后都跳转回循环入口的判断节点
  • 存在性判断:检查placement是否为-1,为真直接返回不存在的提示,为假进入计数阶段
  • 计数循环(第二个while):
    • 入口为placement < len(arr) and arr[placement] == target判断,不满足条件直接跳出到输出阶段
    • 循环体内对placement和occurence做自增操作,完成后跳转回循环入口的判断节点
  • 输出阶段:打印目标元素的出现次数

具体绘制技巧

  • 不同逻辑阶段可以用细边框或者浅底色做区分,避免所有节点挤在一起
  • 所有判断节点(菱形)的出箭头都要标注清楚对应条件(是/否,或者target == arr[center]这类明确的条件描述),避免分支逻辑混淆
  • 循环的回跳箭头尽量从循环体的结束位置统一绕到判断节点的左侧/上侧,不要和其他分支的箭头交叉

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:45:05