LeetCode - 406. Queue Reconstruction by Height - C++

刚开始写了写的思路,知道同高比位置,不同高不确定。感觉是要自己定义比较函数。然后进行不下去,看了讨论区。

思路是先按从高到低排序,同高的第二个数小的排前面。然后先把最高的排好,然后处理次高,次高的位置是此时数组的下标

因为:高个不在乎矮个插队。他只在乎他前面不比他矮的兄弟。

自己写出了代码:

class Solution {
public:
    vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
        sort(people.begin(), people.end(), compare);
        int length = people.size();
        for(int i=0; i<length; i++) {
            if(people[i].second < i) {
                pair<int, int> temp = people[i];
                int index = people[i].second;
                int j = i-1;
                for(; j>=index; j--) {
                    people[j+1] = people[j];
                }
                people[j+1] = temp;
            }
        }
        return people;
    }
    
    static bool compare(pair<int, int> a, pair<int, int> b) {
        
        if(a.first == b.first) return a.second < b.second;
        return a.first > b.first;      
    }
};

我觉得我的比较函数写的挺优秀的。

另外运行时有一个错误:invalid use of non-static member function blabala...把compare前加了static,也不太清楚是怎么回事。

正巧今天刚看了插入排序算法,所以就用插排写的。然后觉得vector有插入的工具函数,又写了一下

class Solution {
public:
    vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
        
        int length = people.size();
        
        vector<pair<int, int>> result;
        
        sort(people.begin(), people.end(), compare);
        
        for(int i=0; i<length; i++) {
            result.insert(result.begin() + people[i].second, people[i]);
        }
        
        return result;
    }
};

期间有一个小疑惑:begin()是取vector的第一个元素,那vector为空时能取到吗,然而代码运行没问题,那就这样吧。

这道题所得:

1. pair

2.sort

3.insert

猜你喜欢

转载自blog.csdn.net/L_bic/article/details/88667300