Golang:如何判断吉他和弦数组中哑音值-1是否出现在中间位置
吉他和弦指法数组哑音合法性判断实现
核心判断规则
所有值为-1的哑音元素只能出现在数组的最开头连续段、或者最末尾连续段,只要中间非哑音区间出现-1(即-1被两个非-1元素夹在中间),就判定为非法。
实现思路
- 定位数组第一个非
-1元素的下标left,left左侧全是开头连续的哑音 - 定位数组最后一个非
-1元素的下标right,right右侧全是末尾连续的哑音 - 检查
left到right之间的所有元素:如果存在任何一个-1,说明哑音出现在中间非哑音区域,判定为非法;否则判定为合法
完整Go代码实现
func isValidChord(c []int) bool { n := len(c) // 空数组可根据业务需求调整返回值,这里默认返回合法 if n == 0 { return true } // 查找第一个非-1的元素位置 left := 0 for left < n && c[left] == -1 { left++ } // 数组全为-1,属于合法情况 if left == n { return true } // 查找最后一个非-1的元素位置 right := n - 1 for right >= 0 && c[right] == -1 { right-- } // 检查中间非哑音区间是否存在-1 for i := left; i <= right; i++ { if c[i] == -1 { return false } } return true }
调用方式
你可以直接在原有遍历逻辑中调用该函数过滤不符合要求的和弦:
// 假设c是当前遍历到的和弦数组 if !isValidChord(c) { // 不符合要求,跳过该和弦 continue } // 符合要求,执行后续处理
内容的提问来源于stack exchange,提问作者jthomasbailey
相关产品推荐
相关产品推荐

