zoukankan      html  css  js  c++  java
  • [LeetCode]1464. 数组中两元素的最大乘积

    给你一个整数数组 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) = 3*4 = 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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/maximum-product-of-two-elements-in-an-array
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    // using System.Linq;
    
    public class Solution {
        public int MaxProduct(int[] nums) {
            // 1
            // Array.Sort(nums);
            // return (nums[nums.Length-1]-1)*(nums[nums.Length-2]-1);
    
            /* 2
                    加入targat的目的主要是为了解决最大数在第一位和重复的问题,
                用作标记最大的数(虽然可能没什么用=.=, 但是第一遍思路, 就这了, 懒得改)
                    如 array = [5, 4, 5, 3, 1]
            */
            int max1 = nums[0];
            int max2 = nums[1];
            int target = 0;
    
            for(int i = 0; i < nums.Length; i++){
                if(nums[i] > max1 && target != i){
                    target = i;
                    max2 = max1;
                    max1 = nums[i];
                }else{
                    if(nums[i] > max2 && i != target){
                        max2 = nums[i];
                    }
                }
            }
            return (max1-1) * (max2-1);
        }
    }
    
  • 相关阅读:
    UVA 10828
    素数推断算法(高效率)
    POJ1611 The Suspects (并查集)
    Android AES加密算法及事实上现
    C语言中的内存对齐
    OpenCV——老照片效果
    uuid 学习
    OpenCV——PS 滤镜, 浮雕效果
    加密算法之BLOWFISH算法
    OpenCV——照亮边缘
  • 原文地址:https://www.cnblogs.com/donpangpang/p/13584287.html
Copyright © 2011-2022 走看看