zoukankan      html  css  js  c++  java
  • 【LeetCode】414. 第三大的数

    给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。

    示例 1:

    输入: [3, 2, 1]
    
    输出: 1
    
    解释: 第三大的数是 1.
    

    示例 2:

    输入: [1, 2]
    
    输出: 2
    
    解释: 第三大的数不存在, 所以返回最大的数 2 .
    

    示例 3:

    输入: [2, 2, 3, 1]
    
    输出: 1
    
    解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
    存在两个值为2的数,它们都排第二。
    

    思路

    先排序,再判断输出

    int thirdMax(int* nums, int numsSize) {
        int x;
        
        //排序,由大到小
        for(int i = numsSize - 1; i > 0; i--)
            for(int j = 0; j < i; j++)
            {
                if(nums[j] < nums[j+1])
                {
                    int tmp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = tmp;
                }
            }
        for(int i = 0; i < numsSize; i++)
            printf("%d", nums[i]);
        
        if( numsSize < 3)
            return nums[0];
        
        int count = 1;
        int i = 1;
        for(; i < numsSize; i++)
        {
            
            if(nums[i] != nums[i-1] && count != 3)
                count += 1;
            else
                continue;
            if(count == 3 || i == numsSize - 1)
                break;
        }
        
        if(count == 3)
            return nums[i];
        else
            return nums[0];
    }
    

    感人,哈哈哈!有时间再改进,优先队列mark下

  • 相关阅读:
    Python实现DES加密算法
    空循环,g++ O2优化
    java 高并发下超购问题解决
    原型模式
    Lambda速学
    观察者模式
    略读策略模式
    .net 字典的速学
    执行计划准备篇
    关于“策略模式”与“桥接模式”的问题
  • 原文地址:https://www.cnblogs.com/wemo/p/10467840.html
Copyright © 2011-2022 走看看