我的天,提交了好几次,终于AC了,可怕的题目。。
分布操作
1、找每条边可选的路径
2、找所有可能的分割点【减少筛选的数量】
class Solution {
public:
int func(int start, vector<set<int>>& paths){
int sum=0;
for(int i=0;i<paths.size();i++)
{
if((paths[i].find(start)==paths[i].end()))
sum++;
}
return sum;
}
int leastBricks(vector<vector<int>>& wall) {
vector<set<int>> paths;
for(int i=0;i<wall.size();i++)
{
set<int> temp;
int sum=0;
for(int j=0;j<wall[i].size()-1;j++){
sum+=wall[i][j];
temp.insert(sum);
}
paths.push_back(temp);
}
int wholePath = 0;
for(int i=0;i<wall[0].size();i++)
wholePath+=wall[0][i];
set<int> possiblePath;
for(int i=0;i<wall.size();i++)
{
int sum=0;
for(int j=0;j<wall[i].size()-1;j++){
sum+=wall[i][j];
possiblePath.insert(sum);
}
}
if(possiblePath.empty())
return wall.size();
int minBreak=INT_MAX;
for(set<int>::iterator it= possiblePath.begin();it != possiblePath.end();it++)
{
int breakTime = func(*it, paths);
minBreak=minBreak<breakTime?minBreak:breakTime;
}
return minBreak;
}
};