Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/nhibernate/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time complexity 从3个元素中找出中间元素(找到三元组的最大乘积)_Time Complexity - Fatal编程技术网

Time complexity 从3个元素中找出中间元素(找到三元组的最大乘积)

Time complexity 从3个元素中找出中间元素(找到三元组的最大乘积),time-complexity,Time Complexity,这是我第一次问,所以如果我的帖子有错误或有什么问题,请告诉我,我会编辑,使它更好 我需要找到数组中三元组的最大乘积,以最好的复杂度,我想我做得还可以,但我被困在了最后一部分,因为我找不到介于3之间的元素(正数中间和负数中间),我想,找到最大值和最小值并不是什么大问题,但如果在这方面也有错误,我很乐意做笔记。我的代码:(我们可以假设数组至少有3个元素) 公共静态int findTriplet(int[]arr){ int max1=Integer.MIN_值,max2=Integer.MIN_值,

这是我第一次问,所以如果我的帖子有错误或有什么问题,请告诉我,我会编辑,使它更好

我需要找到数组中三元组的最大乘积,以最好的复杂度,我想我做得还可以,但我被困在了最后一部分,因为我找不到介于3之间的元素(正数中间和负数中间),我想,找到最大值和最小值并不是什么大问题,但如果在这方面也有错误,我很乐意做笔记。我的代码:(我们可以假设数组至少有3个元素)

公共静态int findTriplet(int[]arr){
int max1=Integer.MIN_值,max2=Integer.MIN_值,max3=Integer.MIN_值;
int min1=Integer.MAX\u值,min2=Integer.MAX\u值,min3=Integer.MAX\u值;
int countPos=0,countNeg=0;
对于(int i=0;i0){
countPos++;//正值计数器
如果(arr[i]>max1){//更新最大值1
max2=max3;
max3=max1;
max1=arr[i];
}
else如果(arr[i]>max3){//更新最大值2
max2=max3;
max3=arr[i];
}
else如果(arr[i]>max2){//更新最大值3
max2=arr[i];
}
else{//else如果值为负值
countNeg++;

如果(arr[i]您至少不需要三个。 两个最小值和一个最大值的乘积将是最大值(假设最小值为负值)。否则,答案将是三个最大值的乘积

解决方案:

 public int maximumProduct(int[] nums) {

    int max1 = Integer.MIN_VALUE;
    int max2 = Integer.MIN_VALUE;
    int max3 = Integer.MIN_VALUE;

    int min1 = Integer.MAX_VALUE;
    int min2 = Integer.MAX_VALUE;

    for(int i : nums) {
        if(i >= max1) {
            max3 = max2;
            max2 = max1;
            max1 = i;
        }
        else if( i <= max1 && i >= max2) {
            max3 = max2;
            max2 = i;
        }
        else if( i <= max1 && i <= max2 && i >= max3) {
            max3 = i;
        }

        if(i <= min1) {
            min2 = min1;
            min1 = i;
        }
        else if(i <= min2 && i >= min1) {
            min2 = i;
        } 
    }

    return Math.max(max1*max2*max3, min1*min2*max1);    
}
public int-maximumpproduct(int[]nums){
int max1=整数.MIN_值;
int max2=整数.MIN_值;
int max3=整数.MIN_值;
int min1=整数的最大值;
int min2=整数的最大值;
for(int i:nums){
如果(i>=max1){
max3=max2;
max2=max1;
max1=i;
}
else if(i=max2){
max3=max2;
max2=i;
}

否则,如果(i你至少不需要三个。 两个最小值和一个最大值的乘积将是最大值(假设最小值为负值)。否则,答案将是三个最大值的乘积

解决方案:

 public int maximumProduct(int[] nums) {

    int max1 = Integer.MIN_VALUE;
    int max2 = Integer.MIN_VALUE;
    int max3 = Integer.MIN_VALUE;

    int min1 = Integer.MAX_VALUE;
    int min2 = Integer.MAX_VALUE;

    for(int i : nums) {
        if(i >= max1) {
            max3 = max2;
            max2 = max1;
            max1 = i;
        }
        else if( i <= max1 && i >= max2) {
            max3 = max2;
            max2 = i;
        }
        else if( i <= max1 && i <= max2 && i >= max3) {
            max3 = i;
        }

        if(i <= min1) {
            min2 = min1;
            min1 = i;
        }
        else if(i <= min2 && i >= min1) {
            min2 = i;
        } 
    }

    return Math.max(max1*max2*max3, min1*min2*max1);    
}
public int-maximumpproduct(int[]nums){
int max1=整数.MIN_值;
int max2=整数.MIN_值;
int max3=整数.MIN_值;
int min1=整数的最大值;
int min2=整数的最大值;
for(int i:nums){
如果(i>=max1){
max3=max2;
max2=max1;
max1=i;
}
else if(i=max2){
max3=max2;
max2=i;
}
如果(我)