教训
用map<int, int>的我是个憨批,憨批!
为什么不用vector< int >把它换掉,为什么!
老早就写出来了,但是一直超时超时…
所以想尽办法优化,把交<0,0>,<1,1>这种原地tp申请表的哈皮都去掉,减少2^n的指数,结果还是最后几个过不去。
我还纳闷不都说大部分暴力没问题吗,结束了去讨论区一看,好家伙暴力解全过了,看了一下不同尝试把map<int,int>存储的楼栋人员数两变化改成用vector< int >直接过了…
上面全是牢骚,结论:
想用int->int这种映射的时候首先考虑vector,他的操作速度比map快很多,很多!
代码如下
class Solution {
public:
int maximumRequests(int n, vector<vector<int>>& requests) {
if (requests.begin() == requests.end() || n == 0)
return 0;
if (n == 1)
return requests.size();
int max = 0, turn = 0;
vector<vector<int>>::iterator iter = requests.begin();
for(int s = 0; s < requests.size(); s++)
{
if (requests[s].front() == requests[s].back())
{
iter = requests.begin() + s;
requests.erase(iter);
iter = requests.begin();
turn++;
s--;
continue;
}
}
if (requests.begin() == requests.end() || n == 0)
return turn;
for (int i = 0; i < (1 << requests.size()); i++)
{
vector<int> mymap(n, 0);
bitset<64> temp(i);
int j = 0, k = i;
j = 0;
while (k != 0)
{
if (k & 1)
{
mymap[requests[j].front()]--;
mymap[requests[j].back()]++;
}
k >>= 1;
j++;
}
int flag = 0;
for (j = 0; j < n; j++)
if (mymap[j] != 0)
{
flag = 1;
break;
}
if (flag)
continue;
max = max > (temp.count()+turn) ? max : (temp.count()+turn);
}
return max;
}
};