1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| class Solution {
public:
vector<int> smallestRange(vector<vector<int>>& nums) {
vector<pair<int, int>> pairs;
int numsn = nums.size();
for(int i=0; i<numsn; i++){
for(int x : nums[i]){
pairs.emplace_back(x, i);
}
}
sort(pairs.begin(), pairs.end());
int l = 0;
vector<int> cnt(numsn);
int ok = 0;
int ansl = 0, ansr = 0, anslen = 0x3f3f3f3f;
int n = pairs.size();
for(int r = 0; r < n; r++){
if(cnt[pairs[r].second] == 0){
ok++;
}
cnt[pairs[r].second]++;
while(ok == numsn){
//在循环里更新答案,因为出了循环就不符合条件了,届时很难判断
if(pairs[r].first - pairs[l].first < anslen){
ansl = pairs[l].first;
ansr = pairs[r].first;
anslen = ansr - ansl;
}
cnt[pairs[l].second]--;
if(cnt[pairs[l].second] == 0){
ok--;
}
l++;
}
}
return {ansl, ansr};
}
};
|