|  | 
|  | 1 | +/** | 
|  | 2 | + * @param {number[]} nums | 
|  | 3 | + * @return {number} | 
|  | 4 | + */ | 
|  | 5 | +var countQuadruplets = function(nums) { | 
|  | 6 | + const n = nums.length | 
|  | 7 | + let ans = 0 | 
|  | 8 | + | 
|  | 9 | + const prev = Array(n+1).fill(0).map(() => Array(n+1).fill(0)) | 
|  | 10 | + const post = Array(n+1).fill(0).map(() => Array(n+1).fill(0)) | 
|  | 11 | + for (let i = 0; i < n; i++) { | 
|  | 12 | + // 数的范围只能是 1~n | 
|  | 13 | + for (let j = 1; j <= n; j++) { | 
|  | 14 | + if (nums[i] < j) prev[i][j] = (i<=0 ? 0 : prev[i-1][j])+1 | 
|  | 15 | + else prev[i][j] = i<=0 ? 0 : prev[i-1][j] | 
|  | 16 | + } | 
|  | 17 | + let k = n-1-i | 
|  | 18 | + for (let j = 1; j <= n; j++) { | 
|  | 19 | + if (nums[k] > j) post[k][j] = post[k+1][j]+1 | 
|  | 20 | + else post[k][j] = post[k+1][j] | 
|  | 21 | + // console.log(k, j, post[k][j]) | 
|  | 22 | + } | 
|  | 23 | + } | 
|  | 24 | + | 
|  | 25 | + for (let j = 0; j < n; j++) { | 
|  | 26 | + for (let k = j+1; k < n; k++) { | 
|  | 27 | + if (nums[k] < nums[j]) { | 
|  | 28 | + let l = j-1<0 ? 0 : prev[j-1][nums[k]] | 
|  | 29 | + let r = post[k+1][nums[j]] | 
|  | 30 | + // post[3][5] | 
|  | 31 | + // console.log(j, k, nums[j], nums[k], l, r) | 
|  | 32 | + ans += l*r | 
|  | 33 | + } | 
|  | 34 | + } | 
|  | 35 | + } | 
|  | 36 | + return ans | 
|  | 37 | +}; | 
0 commit comments