iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
自我挑戰組

30天刷題大挑戰系列 第 14

第 13 天 堅持刷題持續進步( leetcode 016 )

JavaScript 解答

var threeSumClosest = function (nums, target) {

    var ans = nums[0] + nums[1] + nums[2];
    var len = nums.length;

    nums.sort((a, b) => a < b ? -1 : (a > b) ? 1 : 0);

    for (var i = 0; i < len - 2; i++) {
        var j = i + 1;
        var k = len - 1;

        while (j < k) {
            var sum = nums[i] + nums[j] + nums[k];
            if (sum === target) return sum;
            if (sum > target) k--;
            if (sum < target) j++;
            if (Math.abs(target - sum) < Math.abs(target - ans)) {
                ans = sum;
            }
        }
    }
    return ans;

};

Ruby 解答

def three_sum_closest(nums, target)
  nums.sort!
  diff = 2 ** 32
  nums.each_with_index do |n, i|
    left, right = i + 1, nums.length - 1
    while left < right
      cur_diff = target - nums[left] - nums[right] - n
      return target if cur_diff == 0
      diff = cur_diff if cur_diff.abs < diff.abs
      cur_diff > 0 ? left += 1 : right -= 1
    end
  end
  target - diff
end

上一篇
第 12 天 小有成果保持練習( leetcode 043 )
下一篇
第 14 天 不斷嘗試直到成功( leetcode 017 )
系列文
30天刷題大挑戰16

尚未有邦友留言

立即登入留言