牛客 统计好元组
发布日期:2021-07-01 03:35:07 浏览次数:2 分类:技术文章

本文共 1106 字,大约阅读时间需要 3 分钟。

文章目录

1. 题目

链接:

来源:牛客网

现在给定一个数组arr,和a,b两个数字,你要做的就是找到(i,j,k)。且满足

1. 0 <= i < j < k < arr.size()
2. |arr[i] - arr[j]| <= a
3. |arr[j] - arr[k]| <= b
统计满足条件的个数并返回(最后结果可能很大,请取1000000007的余数)。

arr.size() <= 5000

其余变量均<=1e9

2. 解题

  • 枚举中间点,时间复杂度 O ( n 2 ) O(n^2) O(n2)
class Solution {
public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param arr int整型vector * @param a int整型 * @param b int整型 * @return int整型 */ int countTriplets(vector
& arr, int a, int b) {
// write code here int n = arr.size(); if(n < 3) return 0; long long ans = 0, mod = 1e9+7; for(int j = 1; j < n-1; j++) {
long long ct1 = 0, ct2 = 0; for(int i = 0; i < j; i++) {
if(abs(arr[i]-arr[j]) <= a) ct1++; } for(int k = j+1; k < n; k++) {
if(abs(arr[j]-arr[k]) <= b) ct2++; } ans = (ans+ct1*ct2)%mod; } return ans; }};

我的CSDN

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

Michael阿明

转载地址:https://michael.blog.csdn.net/article/details/111601034 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:牛客 共鸣问题(思维难题)
下一篇:牛客 挑选方案问题(排列组合)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年05月01日 05时15分50秒