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

3985.回文子数组求和

难度:困难

问题描述:

给你一个整数数组nums。

你的任务是找出nums中一个回文子数组的最大元素和。返回这样的子数组的最大元素和。

子数组是数组中一个连续的非空元素序列。

如果一个子数组正着读和反着读都相同,则称其为回文。

示例1:

输入:nums=10,10

输出:20

解释:

整个数组10,10是回文子数组。因此,最大元素和为10+10=20。

示例2:

输入:nums=1,2,3,2,1,5,6

输出:9

解释:

连续子数组1,2,3,2,1是回文子数组。它的元素和为1+2+3+2+1=9,并且这是最大元素和。

示例3:

输入:nums=7,1,2,1,7,3,4,3,4

输出:18

解释:

连续子数组7,1,2,1,7是回文子数组。它的元素和为7+1+2+1+7=18,并且这是最大元素和。

示例4:

输入:nums=1,2,3,4,5

输出:5

解释:

不存在长度大于1的回文子数组。数组中的最大元素是5,因此答案为5。

示例5:

输入:nums=1000

输出:1000

解释:

只包含一个元素的子数组也是回文子数组。因此,答案为1000。

提示:

1<=nums.length<=10**5

1<=numsi<=10**9

问题分析:

本题思路简单,首先是如何判断回文子数组,这通过函数check_if_it_is_a_palindrome_array(nums)实现,其功能是对于给定的数组nums,判断其是否为回文数组,如果是,返回True,否则返回False,其次通过一个二重循环列举出所有可能的子数组,判断其回文性,把所有的回文子数组及其和以列表的形式找出,最后输出最大和以及对应的子数组即可。

程序如下:

python 复制代码
#检查一个数组nums是否为一个回文数组,是返回True,否返回False
def check_if_it_is_a_palindrome_array(nums):
    return nums==nums[::-1]

#主程序
nums=eval(input("enter the array nums="))
t=[]
n=len(nums)
for i in range(n):
    for j in range(i+1,n+1):
        s=nums[i:j]
        if check_if_it_is_a_palindrome_array(s):
            t.append([s,sum(s)])
t.sort(key=lambda 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

相关推荐
yangdaxiageo1 小时前
算法时代的“心智置顶“:《功夫女足》如何构建GEO正向飞轮
人工智能·科技·算法·aigc
YMWM_1 小时前
python-venv虚拟环境
linux·开发语言·python
ysa0510301 小时前
【板子】欧拉序
c++·笔记·算法·深度优先·图论
大耳朵糊涂2 小时前
链表的基础操作(二)
算法
Tbisnic2 小时前
23.大模型开发:深度学习----CNN 卷积神经网络 与 RNN 循环神经网络
人工智能·python·rnn·深度学习·cnn·ai大模型
拂拉氏2 小时前
【知识讲解】 红黑树的删除讲解
数据结构·算法·红黑树
初学者,亦行者2 小时前
算法设计与分析:动态规划 - TSP问题和0-1背包问题
c++·算法·动态规划
ward RINL2 小时前
# GPT-5.6-sol vs GPT-5.5 新题实测:非弹性碰撞物理题和稳定路由算法
网络·gpt·算法
灯澜忆梦2 小时前
【dp_1】爬楼梯 | 斐波那契数 | 第 N 个泰波那契数 | 三步问题
算法·golang