sort vector - leetcode 【新用法 multiset, heap, pair】

179. Largest Number

sort(num.begin(), num.end(),  

  [](int a, int b){
    return to_string(a)+to_string(b) > to_string(b)+to_string(a);
  }

);

218. The Skyline Problem

总得思路是:左右节点+multiset 
  首先,将所有的buildings分为左右节点(左x坐标,高)和(右x坐标,高)分别存储到vector<pair<int,int>>的结构中。这里为了将左右分开处理,做节点的高用负数表示。 
  然后,将节点坐标按x坐标排序。 
  之后,循环遍历节点vector,将节点的高插入到multiset中,并判断之前的高是否与当前一样,若不一样则保存当前高度和x坐标。

vector<pair<int, int>> getSkyline(vector<vector<int>>& buildings) {
vector<pair<int, int>> height, res;
//把左边,负高度;右边,高度存起来
for(int i = 0; i < buildings.size(); i++){
height.push_back(pair<int, int>(buildings[i][0], -buildings[i][2]));
height.push_back(pair<int, int>(buildings[i][1], buildings[i][2]));
}
//按x轴排序
sort(height.begin(), height.end());
multiset<int> heap;
int cur, pre;

//注意初始化heap
heap.insert(0);
pre = 0; cur = 0;

for(int i = 0; i < height.size(); i++){
if(height[i].second < 0){
heap.insert(-height[i].second);
}else{
//pair要用first 不能用中括号
heap.erase(heap.find(height[i].second));
}
cur = *heap.rbegin();//max,注意星号
if(pre != cur){
res.push_back(pair<int, int>(height[i].first, cur));
pre = cur;
}
}
return res;
}

posted @ 2017-01-10 12:17  会咬人的兔子  阅读(242)  评论(0编辑  收藏  举报