无重复有效三角形个数

// 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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值