- 题目描述:
- 题目链接:
-视频讲解链接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 res
JavaScript版本:
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @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 };