zoukankan      html  css  js  c++  java
  • Algorithm——四数之和

    Q:

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

    注意:

    答案中不可以包含重复的四元组。

    示例:

    给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

    满足要求的四元组集合为:
    [
    [-1, 0, 0, 1],
    [-2, -1, 1, 2],
    [-2, 0, 0, 2]
    ]

    A:

    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number[][]}
     */
    var fourSum = function(nums, target) {
      nums.sort(function(a, b) {
        return a - b;
      });
    
      var hash = [];
    
      var len = nums.length;
    
      for (var i = 0; i < len; i++)
        for (var j = i + 1; j < len; j++) {
          var a = nums[i]
            , b = nums[j]
            , c = a + b;
    
          if (hash[c] === undefined) 
            hash[c] = [[i, j]];
          else 
            hash[c].push([i, j]);
        }
    
      var ans = [];
    
      var hashSet = {};
    
      for (var i = 0; i < len; i++)
        for (var j = i + 1; j < len; j++) {
          var a = nums[i]
            , b = nums[j]
            , sum = target - a - b;
    
          if (!hash[sum])
            continue;
    
          for (var k = 0, _len = hash[sum].length; k < _len; k++) {
            var item = hash[sum][k];
    
            if (item[0] === i || item[1] === i || item[0] === j || item[1] === j)
              continue;
    
            var c = nums[item[0]]
              , d = nums[item[1]];
    
            var tmp = [a, b, c, d].sort(function(a, b) {
              return a - b;
            });
    
            var str = tmp.join(',');
            if (!hashSet[str]) {
              hashSet[str] = true;
              ans.push(tmp);
            }
          }
        }
    
        return ans;
    };

    小结:恶心他妈给恶心开门恶心到家了。。

  • 相关阅读:
    【Winform】Webservice调用服务器端EXE
    LeetCode: Word Ladder II
    LeetCode: Maximal Rectangle
    Algorithm: 拓扑排序
    Algorithm: 匈牙利算法
    LeetCode: Scramble String
    LeetCode: Integer to Roman
    LeetCode: Roman to Integer
    算法导论:基础知识。
    C++主函数main()讲解
  • 原文地址:https://www.cnblogs.com/bbcfive/p/11181376.html
Copyright © 2011-2022 走看看