• 414. Third Maximum Number


    原题:

    414. Third Maximum Number

    解题:

    思路一为参考代码,提交并未AC,思路二为AC代码;

    思路一:

    1)由于复杂度为O(N),因此,只能遍历数组一次,根据以前碰到的求第二大值,所以可以定义三个变量分别存储最大firstMax,二大secMax,三大值thdMax,然后对数组进行遍历

    2)如果元素大于最大,那么就将该元素就是新的最大值,在更新最大值之前,原始最大值变为二大,原始二大变为三大,然后再更新最大值

    3)如果元素小于最大但是大于二大,同理将二大更新,更新之前,先更新三大,也就是将原始二大赋给三大,代码如下:

    注意:该代码并不是AC代码,只是参考:

    class Solution {
    public:
    	int thirdMax(vector<int>& nums) 
    	{
    		long firstMax = LONG_MIN;
    		long secMax = LONG_MIN;
    		long thdMax =LONG_MIN;
    		int i = 0;
    		for(;i < nums.size(); i++)
    		{
    			if(nums[i] > firstMax)
    			{
    				thdMax = secMax;
    				secMax = firstMax;
    				firstMax = nums[i];
    			}
    			else if(nums[i] > secMax && nums[i] < firstMax)
    			{
    				thdMax = secMax;
    				secMax = nums[i];
    			}
    			else if(nums[i] > thdMax && nums[i] < secMax)
    			{
    				thdMax = nums[i];
    			}
    		}
    		return (thdMax == LONG_MIN || thdMax == secMax)?firstMax:thdMax;
    	}
    };
    

     思路二:

    1)由于集合set为有序序列,利用这个特点,可以将原始遍历一遍插入set中

    2)如果元素个数大于3,则去除set的第一个元素s.begin(),因为这个元素最小

    2)如果元素个数小于2,说明没有第三大值,则返回最大值,也就是s.rbegin()

    以下为AC代码:

    class Solution {
    public:
        int thirdMax(vector<int>& nums) {
            set<int> s;
            for (int num : nums) {
                s.insert(num);
                if (s.size() > 3) {
                    s.erase(s.begin());
                }
            }
            return s.size() == 3 ? *s.begin() : *s.rbegin();
    
        }
    };
    

      

  • 相关阅读:
    改变DEV控件的字体 z
    软件加密的一些误区及防破解
    Devexpress GridControl中combobox级联显示 z
    Devexpress GridControl z
    陈发树云南白药股权败诉真相 取胜仅差三步 z
    重复的价值 周鸿祎
    lodop 控件实现web打印功能
    eclipse 启动报错 java was started but returned code=13
    Navicat 破解版的安装
    WIN10 64位 JDK的安装
  • 原文地址:https://www.cnblogs.com/xqn2017/p/8481023.html
Copyright © 2020-2023  润新知