数组中两元素的最大乘积

1464. 数组中两元素的最大乘积 - 力扣(LeetCode) (leetcode-cn.com)

首先放上运行结果:

以下为正文:

思考

问:从一个数组中找出一个最大的元素的最快方法是什么?
答:因为数组中每个元素都有可能是最大的,因此要找出一个最大的至少要把每个元素检查一遍,时间复杂度至少是 n.
问:那么,找出最大元素之后接着再找出第二大元素的最快方法是什么?是不是 2*n?
答:不是,找出最大元素的过程基本都是相似的,因此找第二大元素时如果能借助找最大元素的过程,就能省去部分重复的操作,时间复杂度会在2*n以内.

代码

#define NOP 0
class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int m[] = { nums[0], nums[1] };
        m[0] > m[1] ? qswap(m[0], m[1]) : NOP;
        int size = nums.size();
        for (int i = 2; i != size; ++i) {
            nums[i] > m[0] ? rectify(m, nums[i]) : NOP;
        }
        return (m[0] - 1) * (m[1] - 1);
    }

    int rectify(int* minHeap, int intruder) {
        minHeap[0] = intruder;
        return minHeap[1] < minHeap[0] ? qswap(minHeap[0], minHeap[1]) : NOP;
    }

    int qswap(int& a, int& b) {
        int temp = a;
        a = b;
        b = temp;
        return NOP;
    }
};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值