***Leetcode 632. Smallest Range
阿新 • • 發佈:2018-12-10
不錯的題 貌似有人頭條被問過
class cmp { public: bool operator()(const pair<int, int>& n1, const pair<int, int>& n2) const { return n1.first > n2.first; } }; class Solution { public: vector<int> smallestRange(vector<vector<int> >& nums) { priority_queue< pair<int, int>, vector< pair<int, int> >, cmp > q; vector< int > ptrs( nums.size(), 0 ); vector<int> ret; int mx = -1e6; for (int i = 0; i < nums.size(); i++) { q.push( make_pair( nums[i][0], i ) ); mx = max(mx, nums[i][0]); } int n = nums.size(); int ans = mx - q.top().first; ret.push_back(q.top().first); ret.push_back(mx); while ( q.size() ) { pair<int, int> tp = q.top(); // cout << "tp.first" << tp.first << endl; q.pop(); if (mx - tp.first < ans) { ret[0] = tp.first; ret[1] = mx; ans = ret[1] - ret[0]; } ptrs[ tp.second ] ++; if (ptrs[tp.second] >= nums[tp.second].size()) break; q.push( make_pair( nums[tp.second][ ptrs[ tp.second ] ], tp.second ) ); mx = max(mx, nums[tp.second][ ptrs[ tp.second ] ]); } return ret; } };