首页 > 解决方案 > 为什么标准库 ​​min 函数在下面显示错误?

问题描述

class Solution {
public:
    
    int maximumProduct(vector<int>& nums) {
        
        int n = nums.size();        
        vector<long long int> left_max(n,0);
        vector<long long int> right_max(n,0);
        vector<long long int> left_min(n,0);
        vector<long long int> right_min(n,0);
        
        left_min[0]=nums[0];
        left_max[0]=nums[0];
        cout<<max(1,5); //this line is working 
        for(int i=1;i<nums.size();i++){
            left_min[i]=min(left_min[i-1],nums[i]); // why this line is throwing error
            left_max[i]=max(left_max[i-1],nums[i]);
        }

        right_min[n-1] = nums[n-1];
        right_max[n-1] = nums[n-1];
        
        for(int i=n-2;i>=0;i++){
            right_min[i]=min(nums[i],right_min[i+1]);
            right_max[i]=max(nums[i],right_max[i+1]);
        }
        
        for(int i=0;i<n;i++){
            cout<<right_min[i]<<" ";
        }
        return 1;
    }
};

上面我评论了两行,第一行显示错误,另一行没有?有人可以解释一下吗?

下面的错误信息:

Line 16: Char 25: error: no matching function for call to 'min'
            left_min[i]=min(left_min[i-1],nums[i]); // why this line is throwing error
                        ^~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/algorithmfwd.h:383:5: note: candidate template ignored: deduced conflicting types for parameter '_Tp' ('long long' vs. 'int')
    min(const _Tp&, const _Tp&);
    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_algo.h:3450:5: note: candidate template ignored: could not match 'initializer_list<type-parameter-0-0>' against 'long long'
    min(initializer_list<_Tp> __l, _Compare __comp)
    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_algo.h:3444:5: note: candidate function template not viable: requires single argument '__l', but 2 arguments were provided
    min(initializer_list<_Tp> __l)
    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/algorithmfwd.h:388:5: note: candidate function template not viable: requires 3 arguments, but 2 were provided
    min(const _Tp&, const _Tp&, _Compare);
    ^

标签: c++error-handlingmin

解决方案


您正在传递两种不同的类型,int以及long long inttominmax. 这些函数期望两个参数是相同的类型。

您可以尝试将int参数转换为long long int.


推荐阅读