题解 | #数组中出现次数超过一半的数字#

数组中出现次数超过一半的数字

https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

#include <ctime>
class Solution {
public:
//迭代更新,取众数,ret就是数组第一个值,times表示出现次数。最后值可以作为判断标准
    int MoreThanHalfNum_Solution(vector<int> numbers) {
    if(numbers.empty()) return 0;

    int ret=numbers[0];
    int times=1;
    for(int i=1;i<numbers.size();i++)
    {
        if(times!=0)
        {
            if(ret==numbers[i])
            {
                times++;
            }
            else {
            times--;
            }
        }
        else {
           ret=numbers[i];
            times=1;
        }
    }
    //遍历数组,找众数
    times=0;
    for(int i=0;i<numbers.size();i++)
    {
        if(ret==numbers[i])
        {
            times++;
        }
    }
    if(times>numbers.size()/2)
       return ret;

return 0;
    }
};

数组第一个作为数组第一个假设值,记录次数。然后进行比较相同时数字times++,不同数字times--。然后判断times进行最后数组众数比较。看出现次数是否过半。

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务