基于二分查找统计元素出现次数的流程图正确性咨询
流程图绘制优化建议
首先先明确你这段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
相关产品推荐
相关产品推荐

