首页 > 其他 > 详细

【程序员面试金典】面试题 17.10. 主要元素

时间:2020-05-31 23:58:29      阅读:74      评论:0      收藏:0      [点我收藏+]

题目

数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。

示例 1:

输入:[1,2,5,9,5,9,5,5,5]
输出:5

示例 2:

输入:[3,2]
输出:-1

示例 3:

输入:[2,2,1,1,1,2,2]
输出:2

说明:你有办法在时间复杂度为 O(N),空间复杂度为 O(1) 内完成吗?

思路

代码

时间复杂度:O(n)
空间复杂度:O(1)

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int size = nums.size();
        int cnt = 1, target = nums[0];
        for (int i = 1; i < size; ++i) {
            if (nums[i] == target) ++cnt;
            else --cnt;
            if (cnt < 0) {
                target = nums[i];
                cnt = 1;
            }
        }
        if (cnt <= 0) return -1;
        cnt = 0;
        for (auto n : nums) {
            if (n == target) ++cnt;
        }
        return cnt > size / 2 ? target : -1;
    }
};

【程序员面试金典】面试题 17.10. 主要元素

原文:https://www.cnblogs.com/galaxy-hao/p/13022219.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!