解决leetcode第3985题回文数组求和

📅 2026/7/9 6:26:58
解决leetcode第3985题回文数组求和
3985.回文子数组求和难度困难问题描述给你一个整数数组nums。你的任务是找出nums中一个回文子数组的最大元素和。返回这样的子数组的最大元素和。子数组是数组中一个连续的非空元素序列。如果一个子数组正着读和反着读都相同则称其为回文。示例1输入nums[10,10]输出20解释整个数组[10,10]是回文子数组。因此最大元素和为101020。示例2输入nums[1,2,3,2,1,5,6]输出9解释连续子数组[1,2,3,2,1]是回文子数组。它的元素和为123219并且这是最大元素和。示例3输入nums[7,1,2,1,7,3,4,3,4]输出18解释连续子数组[7,1,2,1,7]是回文子数组。它的元素和为7121718并且这是最大元素和。示例4输入nums[1,2,3,4,5]输出5解释不存在长度大于1的回文子数组。数组中的最大元素是5因此答案为5。示例5输入nums[1000]输出1000解释只包含一个元素的子数组也是回文子数组。因此答案为1000。提示1nums.length10**51nums[i]10**9问题分析本题思路简单首先是如何判断回文子数组这通过函数check_if_it_is_a_palindrome_array(nums)实现基功能是对于给定的数组nums判断其是否为回文数组如果是返回True否则返回False其次通过一个二重循环列举出所有可能的子数组判断其回文性把所有的回文子数组及其和以列表的形式找出最后输出最大和以及对应的子数组即可。程序如下#检查一个数组nums是否为一个回文数组是返回True否返回False def check_if_it_is_a_palindrome_array(nums): return numsnums[::-1] #主程序 numseval(input(enter the array nums)) t[] nlen(nums) for i in range(n): for j in range(i1,n1): snums[i:j] if check_if_it_is_a_palindrome_array(s): t.append([s,sum(s)]) t.sort(keylambda x: x[1]) print(f连续子数组{t[-1][0]}是回文子数组它的元素和为{t[-1][1]})运行实例一enter the array nums[1,3,2,4,2,3,5]连续子数组[3, 2, 4, 2, 3]是回文子数组它的元素和为14运行实例二enter the array nums[22,33,44,55]连续子数组[55]是回文子数组它的元素和为55运行实例三enter the array nums[33,33]连续子数组[33, 33]是回文子数组它的元素和为66运行实例四enter the array nums[55]连续子数组[55]是回文子数组它的元素和为55