题目链接 思路: 利用multimap将二维vector中的每个元素以(元素值,组别)的方式存入,由于元素值可能重复,所以这里使用multmap来存储。利用滑动窗口对multimap中的存入的元素从头到尾开始进行线性的遍历,同时用一个map来记录有多少组的元素已经被遍历。当检测到map.size()包含每组时,开始将窗口左端缩小,同时记录过程中左端和右端的最小差值。最后得到的左端和右端值就是答案 class Solution { public: vector<int> smallestRange(vector<vector<int>>& nums) { multimap<int,int>div; map<int,int>temp; for(int i=0;i<nums.size();i++) { for(int j=0;j<nums[i].size();j++) { div.insert(pair<int,int>(nums[i][j],i)); } } auto left=div.begin(); auto right=div.begin(); int res=INT_MAX; int k=nums.size(); int l=0,r=0; vector<int> ans; while(right!=div.end()) { temp[right->second]++; while(temp.size()==k) { if(right->first-left->first<res) { res=right->first-left->first; l=left->first; r=right->first; } temp[left->second]--; if(temp[left->second]==0) { temp.erase(left->second); } left++; } right++; } if(res!=INT_MAX) { ans.push_back(l); ans.push_back(r); } return ans; } };