【interview17.10】 主要元素:详解
生活随笔
收集整理的這篇文章主要介紹了
【interview17.10】 主要元素:详解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
interview17.10 主要元素
1.題目
數(shù)組中占比超過一半的元素稱之為主要元素。給定一個整數(shù)數(shù)組,找到它的主要元素。若沒有,返回-1。
2.算法
3.排序算法 + 計數(shù)器
解題思路:從題干分析,我們需要找到數(shù)組中數(shù)量占比多于一半(numsSize % 2 + 1)的數(shù)字。由于數(shù)字是隨機的并且取值范圍較大,因此不適合使用桶計數(shù)。可以先將數(shù)組進行排序,然后遍歷一遍數(shù)組,統(tǒng)計每種數(shù)字的數(shù)量,如果數(shù)量多于一半,就輸出當前的數(shù)據(jù)即可。
步驟1:使用qsort排序。初始化一個統(tǒng)計變量count
步驟2:從數(shù)組左端開始遍歷,檢查當前數(shù)字nums[i]與上一個數(shù)字nums[i - 1]之間的關(guān)系
步驟3:若nums[i] != nums[i - 1]。統(tǒng)計count是否多于一半,如果多于一半則輸出nums[i - 1]。如果少于一半,則count清為1。
步驟4:若nums[i] == nums[i - 1]。count自增1。
int sort_up(const void *a, const void *b) {return *(int *)a - *(int *)b; }int majorityElement(int* nums, int numsSize){if (numsSize == 1)return *nums;int count = 1;qsort(nums, numsSize, sizeof(int), sort_up);for(int i = 1; i < numsSize; i++) {if (nums[i] == nums[i - 1])count++;elsecount = 1;if (count > numsSize % 2)return nums[i];}return -1; }總結(jié)
以上是生活随笔為你收集整理的【interview17.10】 主要元素:详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c 调用mysql密码为空_C语言连My
- 下一篇: java比较时间的先后utc时间,日期、