Python栈的应用:寻找最长连续子数组的和
以下是Python代码实现:
def find_longest_subarray(arr): """ 寻找最长连续子数组的和 :param arr: 数组 :return: 最长连续子数组的和 """ stack = [] # 存储连续子数组的起始下标 res = float('-inf') # 最大和初始化为负无穷 for i in range(len(arr)): if not stack or arr[i] >= stack[-1] + arr[stack[-1]]: # 当前元素大于等于栈顶元素加上栈顶元素的和 stack.append(i) else: # 当前元素小于栈顶元素加上栈顶元素的和 start = stack.pop() # 弹出栈顶元素作为连续子数组的起始下标 res = max(res, sum(arr[start:i])) # 更新最大值 i -= 1 # 重新检查当前元素 # 检查堆栈中遗留的元素 while stack: start = stack.pop() res = max(res, sum(arr[start:])) return res # 测试代码 arr1 = [1, -2, 3, 10, -4, 7, 2, -5] arr2 = [1, -2, 3, 10, -4, 7, 2, -5, 8] arr3 = [-1, -2, -3, -4, -5] arr4 = [1, 2, 3] arr5 = [-1, 2, -3] arr6 = [0, 0, 0] print(find_longest_subarray(arr1)) # 输出:18 print(find_longest_subarray(arr2)) # 输出:18 print(find_longest_subarray(arr3)) # 输出:-1 print(find_longest_subarray(arr4)) # 输出:6 print(find_longest_subarray(arr5)) # 输出:2 print(find_longest_subarray(arr6)) # 输出:0
相关文章