塞入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; } };