
塞入map后,【1,4】被合并了,只剩下一个了。导致后续跳过了

class Solution {
public:
// 失败 1 思路错 不应该和上一个比较 而是和上一次合并的结果比较
vector<vector<int>> merge1(vector<vector<int>>& intervals) {
// 1 排序
map<int,vector<int>> map_list;
vector<vector<int>> result;
if (intervals.empty()) {
return result;
}
if(intervals.size()==1){
return intervals;
}
for(int i=0;i<intervals.size();i++){
map_list[intervals[i][0]]=intervals[i];
}
for (auto it = map_list.begin(); it != map_list.end(); ++it) {
int last_begin=it->second[0];
int last_end=it->second[it->second.size()-1];
auto next_it = std::next(it);
if(next_it==map_list.end()){
result.push_back(it->second);
break;
}
int current_begin=next_it->second[0];
int current_end=next_it->second[next_it->second.size()-1];
// cout<<" last_end "<< last_end
// <<" current_begin "<< current_begin
// <<endl;
if(last_end>=current_begin){
vector<int> temp_;
temp_.push_back(last_begin);
temp_.push_back(max(last_end,current_end));
result.push_back(temp_);
it=std::next(it);
}
else{
result.push_back(it->second);
}
}
return result;
}
// 自己成功1 14% 用时 8.9 内存 map 耗费时间和空间
vector<vector<int>> merge_map(vector<vector<int>>& intervals) {
// 1 排序
map<int,vector<int>> map_list;
vector<vector<int>> result;
for(int i=0;i<intervals.size();i++){
if(map_list.contains(intervals[i][0])){
int old_max = map_list[intervals[i][0]][1];
int now_max = intervals[i][1];
map_list[intervals[i][0]]={intervals[i][0],max(old_max,now_max)};
}
else{
map_list[intervals[i][0]]=intervals[i];
}
}
result.push_back(map_list.begin()->second);
for (auto it = std::next(map_list.begin()); it != map_list.end(); ++it) {
vector<int> last_v=result.back();
int last_begin=last_v[0];
int last_end=last_v[1];
int current_begin=it->second[0];
int current_end=it->second[1];
// cout
// << " last_begin "<< last_begin
// << " |last_end " << last_end
// << " |current_begin "<<current_begin
// << " |current_end " << current_end
// <<endl;
if(last_end>=current_begin){
result.pop_back();
last_v={last_begin,max(last_end,current_end)};
result.push_back(last_v);
}
else{
result.push_back(it->second);
last_v=it->second;
}
}
return result;
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
// 1 排序
map<int,vector<int>> map_list;
vector<vector<int>> result;
for(int i=0;i<intervals.size();i++){
if(map_list.contains(intervals[i][0])){
int old_max = map_list[intervals[i][0]][1];
int now_max = intervals[i][1];
map_list[intervals[i][0]]={intervals[i][0],max(old_max,now_max)};
}
else{
map_list[intervals[i][0]]=intervals[i];
}
}
result.push_back(map_list.begin()->second);
for (auto it = std::next(map_list.begin()); it != map_list.end(); ++it) {
vector<int> last_v=result.back();
int last_begin=last_v[0];
int last_end=last_v[1];
int current_begin=it->second[0];
int current_end=it->second[1];
// cout
// << " last_begin "<< last_begin
// << " |last_end " << last_end
// << " |current_begin "<<current_begin
// << " |current_end " << current_end
// <<endl;
if(last_end>=current_begin){
result.pop_back();
last_v={last_begin,max(last_end,current_end)};
result.push_back(last_v);
}
else{
result.push_back(it->second);
last_v=it->second;
}
}
return result;
}
};

浙公网安备 33010602011771号