题目名称

给你一个下标从 0 开始的正整数数组 nums 。请你找出并统计满足下述条件的三元组 (i, j, k) 的数目:

0 <= i < j < k < nums.length
nums[i]、nums[j] 和 nums[k] 两两不同 。
换句话说:nums[i] != nums[j]、nums[i] != nums[k] 且 nums[j] != nums[k] 。
返回满足上述条件三元组的数目。

示例

输入:nums = [4,4,2,4,3]
输出:3
解释:下面列出的三元组均满足题目条件:

  • (0, 2, 4) 因为 4 != 2 != 3
  • (1, 2, 4) 因为 4 != 2 != 3
  • (2, 3, 4) 因为 2 != 4 != 3
    共计 3 个三元组,返回 3 。
    注意 (2, 0, 4) 不是有效的三元组,因为 2 > 0 。

输入:nums = [1,1,1,1,1]
输出:0
解释:不存在满足条件的三元组,所以返回 0

题解

三重循环暴力破解

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* @param {number[]} nums
* @return {number}
*/
var unequalTriplets = function(nums) {
let n = nums.length
let num = 0
for(let i = 0 ; i < n - 2; i++) {
for(let j = i + 1; j < n - 1; j++) {
while(nums[j] === nums[i] && j < n - 1) {
j++
}
for(let k = j + 1; k < n; k++) {
while(nums[k] === nums[i] || nums[k] === nums[j] && k < n) {
k++
}
if(checkTriplets(nums[i], nums[j], nums[k]) && k < n) {
num++
}
}
}
}
return num
};

const checkTriplets = (n1, n2, n3) => {
return n1 !== n2 && n3 !== n2 && n1 !== n3
}