• leetcode Majority Element


    题目链接:https://leetcode.com/problems/majority-element/

    这道题目要求找出超过数组个数一半的元素

    分析:和编程之美上的寻找发帖"水王"是同一个题目,如果每次都删除两个不同的元素,那么在剩下的元素中,原来超过数组个数一半的元素,现在仍然会超过数组个数的一半,但是问题的规模减小了;那么如果用程序实现这一原理呢?可以使用一个candidate来记录结果的候选,并用time来记录当前这个元素出现的次数,如果后面的元素和candidate不相同,就同时删除这个元素和候选元素,相当于删除一对不同的元素,实现代码如下:

    class Solution
    {
    public:
        int majorityElement(vector<int>& nums)
        {
            int n = nums.size();
            int times = 0;
            int candidate;
    
            for(int i=0; i<n; ++i)
            {
                if(times == 0)
                {
                    times = 1;
                    candidate = nums[i];
                }
                else
                {
                    if(nums[i] == candidate)
                    {
                        ++times;
                    }
                    else
                    {
                        --times;
                    }
                }
            }
            return candidate;
        }
    };
  • 相关阅读:
    google
    学习Linux第六天
    对比教学大纲
    周 记
    《世界是数字的》读后感
    《我是一只IT小小鸟》读后感
    前端小知识
    JavaScript 执行机制
    执行栈和任务队列
    支付宝前端员工培训手册
  • 原文地址:https://www.cnblogs.com/shirley-ict/p/5477358.html
Copyright © 2020-2023  润新知