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