// console.time(1);
// /**
// * @param {number[]} nums
// * @return {number}
// */
// var triangleNumber = function (nums) {
// let left, right;
// nums = nums.sort((a, b) => a - b);
// var result = [];
// var map = new Map();
// for (let i = nums.length - 1; i >= 2; i--) {
// left = 0;
// right = i - 1;
// while (left < right) {
// if (nums[left] + nums[right] > nums[i]) {
// let l = left;
// let r = right;
// while (l < r) {
// if (!map.has(`[${nums[l]}, ${nums[r]}, ${nums[i]}]`)) {
// console.log(`[${nums[l]}, ${nums[r]}, ${nums[i]}]`);
// map.set(`[${nums[l]}, ${nums[r]}, ${nums[i]}]`, 1);
// result.push([nums[l], nums[r], nums[i]]);
// }
// l++;
// }
// right--;
// } else {
// left++;
// }
// }
// }
// return result;
// };
// let arr = [2, 3, 4, 4];
// console.log(triangleNumber(arr));
// console.timeEnd(1);
console.time(1);
function triangleNumber(arr) {
if (!arr || arr.length < 3) return 0;
let map = new Map();
let left;
let right;
let count = 0;
arr = arr.sort((a, b) => {
return a - b;
});
for (let i = arr.length - 1; i >= 2; i--) {
left = 0;
right = i - 1;
while (left < right) {
if (arr[left] + arr[right] > arr[i]) {
let l = left;
let r = right;
while (l < r) {
if (!map.has(`[${arr[l]},${arr[r]},${arr[i]}]`)) {
map.set(`[${arr[l]},${arr[r]},${arr[i]}]`, 1);
count++;
}
l++;
}
right--;
} else {
left++;
}
}
}
console.log(map);
return count;
}
let arr = [2, 3, 1, 1];
console.log(triangleNumber(arr));
console.timeEnd(1);