您的位置:首页 > 其它

leetCode_Max Sum of Rectangle No Larger Than K

2016-11-03 16:38 337 查看
题意:给定一个二维整数数组,找出一个子矩形,使得该子矩形的和不超过K且和最大

思路:简单的思路就是枚举起点和终点,然后每行每列sum数组,加加减减即可,显然会超时。

优化的思路:枚举起点列和终点列,枚举每一行,把前面的和放在集合里,集合有lower_bound方法可以二分查找,找到合适的值即可。

代码如下:

class Solution {
public:
int maxSumSubmatrix(vector<vector<int>>& matrix, int r) {
int i,j,k,m,n,ans=INT_MIN,ei,ej,temp;
m=matrix.size();
if(m==0) return 0;
else n=matrix[0].size();
for(i=0;i<n;i++)
{
vector<int> tsum(m,0);
for(j=i;j<n;j++)
{
set<int> st{0};
int curSum=0;
for(k=0;k<m;k++)
{
tsum[k]+=matrix[k][j];
curSum+=tsum[k];
auto it=st.lower_bound(curSum-r);
if((it!=st.end())&&curSum-*it<=r) ans=max(ans,curSum-*it);
st.insert(curSum);
}
}
}
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: