- 计算出前缀和,两个前缀和之间的差值即为子数组的和。
- 遍历两个点,不断的更新ret,也就是两个点之间的长度。
- 在遍历的时候,一层循环只用遍历到n-ret,因为j-i的长度最大必大于ret,二层循环从i+ret+1 遍历到n,j-i 的长度也要大于ret
// write code here int n = arr.size(); vectorpre_sum(n+1,0); for(int i=0;i<n;i++){ pre_sum[i+1] = pre_sum[i]+arr[i]; } int ret = 0; for(int i=0;i<=n-ret;i++){ for(int j=i+ret+1;j<=n;j++){ if(k==pre_sum[j]-pre_sum[i]){ ret = max(j-i,ret); } } } return ret==0?0:ret; }