Leetcode刷題——求眾數

Miss_yuki發表於2018-07-23

大家好,抽空刷了一道題,也是一道簡單的陣列題,但是因為我用了map而且一次就通過了,感覺還是有必要寫下來記錄一下map的使用。題目如下:

思路如下:

首先用sort對陣列進行排序,然後定義一個<int,int>型的map,第一個int為數重複的次數,第二個int為對應的數。遍歷陣列將重複的數和次數依次寫入map。然後定義一個迭代器it,迴圈查詢map中第一個int中的最大且大於len/2的值。最後使用find查詢,尋找該最大值對應的map中的迭代器的位置,然後讀取該位置第二個int即其對應的數即可。

程式碼如下:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int len = nums.size();
        int cont = len / 2;
        sort(nums.begin(),nums.end());
        map<int,int> my_map;
        int i = 0;
        while(i < len){
            int temp = nums[i];
            int flag  = 1;
            i++;
            while(nums[i] == temp){
                flag++;
                i++;
            }
            my_map.insert(pair<int,int>(flag,temp));
        }
        map<int,int>::iterator it;
        it = my_map.begin();
        int result = 0;
        int result_num = 0;
        while(it != my_map.end()){
              if(it -> first > result && it -> first > cont){
                  result = it -> first;
              }
            it++;
        }
        it= my_map.find(result);
        result_num = it -> second;
        return result_num;
    }
};

希望後面會更加熟練應用map,我們下期見!

相關文章