Python如何遍历数组索引实现先降后升序列查找功能
功能实现代码及思路
你原有代码的核心问题是遍历元素时将元素值直接作为索引逻辑使用,无法正确访问数组后续位置的元素,导致逻辑完全错误。
以下是O(n)时间复杂度的最优实现,仅需遍历数组一次即可完成匹配:
def find_feature_sequence(arr): arr_len = len(arr) # 数组长度不足3时不可能满足先降后升的结构要求,直接返回空 if arr_len < 3: return [] idx = 0 while idx < arr_len - 2: result = [] # 匹配下降段起点:当前元素 >= 下一个元素 if arr[idx] >= arr[idx + 1]: result.append(arr[idx]) idx += 1 result.append(arr[idx]) # 收集所有下降/持平的元素 while idx < arr_len - 1 and arr[idx] >= arr[idx + 1]: idx += 1 result.append(arr[idx]) # 收集所有上升/持平的元素 while idx < arr_len - 1 and arr[idx] <= arr[idx + 1]: idx += 1 result.append(arr[idx]) # 验证序列同时包含下降段和上升段 if len(result) >= 3: # 如果需要去掉最左侧的峰值,返回result[1:]即可匹配你给出的预期输出 return result idx += 1 return []
测试验证
test_arr = [2, 9, 6, 2, 5, 7, 7, 3] print(find_feature_sequence(test_arr)) # 输出为:[9, 6, 2, 5, 7, 7] # 调整返回值为result[1:]时输出为[6, 2, 5, 7, 7],完全匹配你的预期结果
内容的提问来源于stack exchange,提问作者some python noob
相关产品推荐
相关产品推荐

