【java】628. Maximum Product of Three Numbers

本文介绍了一种针对整数数组排序并计算特定元素乘积的方法。该方法考虑了负数和零的存在,并通过堆排序优化算法实现。文章详细展示了如何处理数组中可能出现的特殊情况,以确保最终结果的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题原文点击打开链接

先对这道题进行排序,然后排序前三的整数相乘。但是要考虑两种特殊情况,第一是数组里面包含负整数的情况,第二种是前三里面包含0的情况。分开讨论问题就很简单了。

public void intiHeap(int[] nums,int length,int parent){
        int val = nums[parent];
        int child = 2*parent+1;
        while( child < length){
            if (child+1 < length && nums[child+1]<nums[child]) child++;

            if (val<nums[child]) break;

            nums[parent] = nums[child];
             parent = child;
             child = 2*parent+1;
        }
        nums[parent] = val;
    }
    public void sort(int[] nums){
        for (int i = nums.length/2;i >= 0;i--){
            intiHeap(nums,nums.length,i);
        }
        

        for (int i = nums.length-1;i>=0;i--){
            int tmp = nums[0];
            nums[0] = nums[i];
            nums[i] = tmp;
            intiHeap(nums,i,0);
        }
    }
    public int maximumProduct(int[] nums) {
        sort(nums);
        int startPos = -1;
        int endPos = -1;
        //记录第一个0出现的位置
        for (int i = 0;i<nums.length;i++){
            if (nums[i] == 0) {
                startPos = i;
                break;
            }
        }
        //记录最后一个0出现的位置
        for (int  i = nums.length-1;i>=0;i--){
            endPos = i;
            break;
        }
        if (startPos <= 2 && startPos >0){
            if (endPos+2<nums.length){
                return nums[0]*nums[nums.length-1]*nums[nums.length-2];
            }else{
                return 0 ;
            }
        }
                //记录下第一个负数出现的位置
        int negExit = -1;
        for (int i = 0;i<nums.length;i++){
            if (nums[i]<0){
                negExit = i;
                break;
            }
        }
        if (negExit>-1 && negExit+1<nums.length){
            return nums[0]*nums[1]*nums[2]>nums[0]*nums[nums.length-1]*nums[nums.length-2]?
                    nums[0]*nums[1]*nums[2]:nums[0]*nums[nums.length-1]*nums[nums.length-2];
        }
        return nums[0]*nums[1]*nums[2];
    }

### Numpy Maximum 函数详解 Numpy 的 `maximum` 函数用于逐元素比较两个数组,并返回一个新的数组,其中包含了每一对对应位置上较大的那个数。 #### 基本语法 ```python numpy.maximum(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'maximum'> ``` 参数说明: - `x1`, `x2`: 输入数组。如果形状不同,则它们必须能够广播到共同的形状。 - `out`: 可选,默认为无。指定放置结果的位置。 - `where`: 可选,默认为 True。表示计算该操作的工作掩码。 - 其他关键字参数详见官方文档。 #### 使用示例 ##### 示例 1:基本用法 当输入是简单的数值时: ```python import numpy as np result = np.maximum(3, 5) print(result) # 输出: 5 ``` ##### 示例 2:一维数组之间的最大值运算 对于相同长度的一维数组: ```python array_a = np.array([1, 3, 7]) array_b = np.array([4, 2, 6]) max_array = np.maximum(array_a, array_b) print(max_array) # 输出: [4 3 7] ``` ##### 示例 3:二维数组间的最大值运算 处理多维度的数据结构同样适用: ```python matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) max_matrix = np.maximum(matrix_1, matrix_2) print(max_matrix) # 输出: # [[5 6] # [7 8]] ``` ##### 示例 4:与标量的最大值运算 可以将一个标量应用于整个数组中的每一个元素: ```python scalar_value = 9 vector = np.array([-1, 0, 5, 10]) max_vector_scalar = np.maximum(vector, scalar_value) print(max_vector_scalar) # 输出: [9 9 9 10] ``` 通过上述例子可以看出,无论是一维还是多维情况下的数据对比,亦或是对标量的操作,`np.maximum()` 都能很好地完成任务[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值