面试题—三个数之和小于某个值的组合个数

Posted JeemyJohn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题—三个数之和小于某个值的组合个数相关的知识,希望对你有一定的参考价值。

本题是阿里蚂蚁金服面试题:

给定一个数组s,和一个数a,在数组s里面找到3个数使这3个数的和小于a,即s[i]+s[j]+s[k]<a,请你设计一个函数返回数组s里这样的组合有多少个?

   int f(double s[], double a) 
        int cnt = 0;
        Arrays.sort(s);
        int i = 0;
        int j = s.length;
        while (i < j - 1) 
            int low = i;
            int high = j;
            while (low < high) 
                int k = (low + high) / 2;

                if (s[i] + s[j] + s[k] >= a) 
                    high = k - 1;
                 else if (s[i] + s[j] + s[k] < a) 
                    // 下面区间都是满足的
                    cnt += k - low;
                    // 二分查找
                    low = k + 1;
                
            

            // 扫描结束,根据情况移动上下限
            if (s[i] + s[j] > a) 
                j--;
             else 
                i++;
            
        

        return cnt;
    

以上是关于面试题—三个数之和小于某个值的组合个数的主要内容,如果未能解决你的问题,请参考以下文章

面试题—三个数之和小于某个值的组合个数

CodeVS 1432-总数统计

检测数组里是不是有两个数之和等于某个数

⭐算法入门⭐《堆》中等01 —— LeetCode 面试题 17.09. 第 k 个数

HDU 4417 Super Mario 主席树查询区间小于某个值的个数

python面试题-找到两个数组元素和小于等于目标值target的最大值的所有组合