【LeetCode_1464】数组中两元素的最大乘积_Java_O(n)解法

参考部分,如有侵权,请联系删除。

题目描述

给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。

请你计算并返回该式的最大值。

示例 1:
输入:nums = [3,4,5,2]
输出:12
解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)(nums[2]-1) = (4-1)(5-1) = 34 = 12 。
示例 2:
输入:nums = [1,5,4,5]
输出:16
解释:选择下标 i=1 和 j=3(下标从 0 开始),则可以获得最大值 (5-1)
(5-1) = 16 。
示例 3:
输入:nums = [3,7]
输出:12
提示:
2 <= nums.length <= 500
1 <= nums[i] <= 10^3

方法一、排序

Java解法

class Solution {
    public int maxProduct(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length;
        return ((nums[n-1]-1)*(nums[n-2]-1));
    }
}

耗时1ms

复杂度分析

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

方法二、比较

Java解法

参考 数组中两元素的最大乘积

class Solution {
    public int maxProduct(int[] nums) {
        int a = nums[0];
        int b = nums[1];
        for(int i=2; i<nums.length; i++){
            if(a>b){
                b = b > nums[i] ? b : nums[i];
            } else {
                a = a > nums[i] ? a : nums[i];
            }
        }
        return (a-1) * (b-1);
    }
}

耗时1ms

复杂度分析

时间复杂度:O(n),因为比较的时间复杂度是O(1),所以主要是遍历数组的时间复杂度
空间复杂度:O(1)

博主比较小白,但是热爱分享。一直感觉自己写代码的能力,算法能力都不太行,所以最近开始刷LeetCode,一方面记录方便自己学习,另一方面给需要的同伴参考。虽然失败并不可怕,但是也希望同伴们少踩一些坑。分析算法挺费劲的,留个赞或评论支持一下博主吧!同时我也非常希望写出更通俗易懂的文章,知识尚浅,如有遗漏或错误,欢迎指正~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂java杰尼龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值