- 题目描述:
- 题目链接:
-视频讲解链接B站视频讲解
- 复杂度分析:
- 代码:
c++版本:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param arr int整型vector
* @param a int整型
* @param b int整型
* @return int整型
*/
int countTriplets(vector<int>& arr, int a, int b) {
// write code here
int mod = 1000000007;
int res = 0;
for(int j = 0;j < arr.size();j ++){
int cnt1 = 0;//记录|arr[i] - arr[j]| <= a
int cnt2 = 0;//记录|arr[j] - arr[k]| <= b
//寻找a[i] - a[j] <= a
for(int i = j - 1;i >=0;i --){
if(abs(arr[i] - arr[j]) <= a){
cnt1++;
}
}
//寻找a[j] - a[k] <= b
for(int k = j + 1;k < arr.size();k ++){
if(abs(arr[k] - arr[j]) <= b){
cnt2++;
}
}
res = (res + (cnt1 * cnt2) %mod )%mod;
}
return res;
}
};
Java版本:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param arr int整型一维数组
* @param a int整型
* @param b int整型
* @return int整型
*/
public int countTriplets (int[] arr, int a, int b) {
// write code here
int mod = 1000000007;
int res = 0;
for(int j = 0;j < arr.length;j ++){
int cnt1 = 0;//记录|arr[i] - arr[j]| <= a
int cnt2 = 0;//记录|arr[j] - arr[k]| <= b
//寻找a[i] - a[j] <= a
for(int i = j - 1;i >=0;i --){
if(Math.abs(arr[i] - arr[j]) <= a){
cnt1++;
}
}
//寻找a[j] - a[k] <= b
for(int k = j + 1;k < arr.length;k ++){
if(Math.abs(arr[k] - arr[j]) <= b){
cnt2++;
}
}
res = (res + (cnt1 * cnt2) %mod )%mod;
}
return res;
}
}Python版本:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# @param arr int整型一维数组
# @param a int整型
# @param b int整型
# @return int整型
#
class Solution:
def countTriplets(self , arr , a , b ):
# write code here
mod = 1000000007
res = 0
for j in range(len(arr)):
cnt1 = 0#记录|arr[i] - arr[j]| <= a
cnt2 = 0#记录|arr[j] - arr[k]| <= b
#寻找a[i] - a[j] <= a
for i in range(j-1,-1,-1):
if abs(arr[i] - arr[j]) <= a:
cnt1+=1
#寻找a[j] - a[k] <= b
for k in range(j + 1,len(arr)):
if abs(arr[k] - arr[j]) <= b:
cnt2+=1
res = (res + (cnt1 * cnt2) %mod )%mod
return resJavaScript版本:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param arr int整型一维数组
* @param a int整型
* @param b int整型
* @return int整型
*/
function countTriplets( arr , a , b ) {
// write code here
let mod = 1000000007;
let res = 0;
for(let j = 0;j < arr.length;j ++){
let cnt1 = 0;//记录|arr[i] - arr[j]| <= a
let cnt2 = 0;//记录|arr[j] - arr[k]| <= b
//寻找a[i] - a[j] <= a
for(let i = j - 1;i >=0;i --){
if(Math.abs(arr[i] - arr[j]) <= a){
cnt1++;
}
}
//寻找a[j] - a[k] <= b
for(let k = j + 1;k < arr.length;k ++){
if(Math.abs(arr[k] - arr[j]) <= b){
cnt2++;
}
}
res = (res + (cnt1 * cnt2) %mod )%mod;
}
return res;
}
module.exports = {
countTriplets : countTriplets
};
京公网安备 11010502036488号