面试题—三个数之和小于某个值的组合个数
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;
以上是关于面试题—三个数之和小于某个值的组合个数的主要内容,如果未能解决你的问题,请参考以下文章
⭐算法入门⭐《堆》中等01 —— LeetCode 面试题 17.09. 第 k 个数