題解:
方法1:(運用c++中map容器的特性) 在c++中,map容器能夠存儲鍵值對。因此,我們可以把元素看成鍵(key),把每個元素的數目看成值(value),由于map容器中key不能重復,因此對于重復元素,我們可以用value進行計數。最后看哪個元素的計數大于n/2。
代碼:
int majorityElement(vector<int>& nums) { if (nums.size() == 0) return -1; map<int, int> count; for (vector<int>::size_type ix = 0; ix < nums.size(); ++ix) if (++count[nums[ix]] > nums.size()/2) return nums[ix]; return -1;}方法2:(運用排序以及絕對眾數的特征) 由于絕對眾數的個數大于數組大小的一半,因此,當數組排序后,位于數組中央的元素必定是絕對眾數。
代碼:
int majorityElement(vector<int>& nums) { if (nums.size() == 0) return -1; sort(nums.begin(), nums.end()); return nums[nums.size()/2];}新聞熱點
疑難解答