1. Tópico:
Link do tópico: 918. A soma máxima de subarranjos circulares - LeetCode
Em segundo lugar, as etapas de solução de problemas:
A seguir está o processo de resolução deste problema com a ideia de programação dinâmica . Acredito que todos possam entender e dominar este clássico problema de programação dinâmica.
3. Código de referência:
class Solution {
public:
int maxSubarraySumCircular(vector<int>& nums) {
int n=nums.size();
vector<int> f(n);
auto g=f;
f[0]=nums[0];
g[0]=nums[0];
int fmax=f[0];
int gmin=g[0];
int sum=nums[0];
for(int i=1;i<n;i++)
{
sum+=nums[i];
f[i]=max(nums[i],f[i-1]+nums[i]);
g[i]=min(nums[i],g[i-1]+nums[i]);
fmax=max(fmax,f[i]);
gmin=min(gmin,g[i]);
}
if(sum==gmin)
{
return fmax;
}
else
{
return max(fmax,sum-gmin);
}
}
};
O acima é todo o processo de análise deste tópico com a ideia de programação dinâmica , você aprendeu? Se as soluções acima forem úteis para você, tenha cuidado e preste atenção. Continuaremos a atualizar as questões clássicas da programação dinâmica no futuro . Nos vemos na próxima edição! ! ! ! ! ! ! ! !