![9.23[A]](http://pic.xiahunao.cn/yaotu/9.23[A])
1658目前想的是考虑从前和后选择连续的两段数使其加和为X那就是设置前缀和和后缀和两个数组然后尝试寻找每个前缀和数组的元素所对应的后缀和元素一开始是前后都顺序遍历但是超时了class Solution { public: int minOperations(vectorint nums, int x) { int nnums.size(); vectorintfsum(n,0),bsum(n,0); fsum[0]nums[0]; for(int i1;in;i){ fsum[i]fsum[i-1]nums[i]; } bsum[n-1]nums[n-1]; for(int in-2;i0;i--){ bsum[i]bsum[i1]nums[i]; } int resINT_MAX; for(int i0;in;i){ if(fsum[i]x){break;} else if(fsum[i]x){resmin(res,i1);} for(int jn-1;ji;j--){ if(bsum[j]x-fsum[i]){break;} else if(bsum[j](x-fsum[i])){resmin(res,in-j1);} } } for(int in-1;i0;i--){ if(bsum[i]x){break;} else if(bsum[i]x){resmin(res,n-i);} } return (resINT_MAX)?-1:res; } };如果考虑使用哈希表来优化那么创建一个哈希表在求前缀和时就给哈希表对应的x-sum[i]填坑如果后面对应后缀和存在时就更新res那么复杂度该是nlogn