LeetCode16 最接近的三数之和

2019-08-05  本文已影响0人  麦兜儿流浪记

题目

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

解题思路

    1. 将数组排序 时间复杂度是O(nlogn)
    2. 利用三个指针对数组进行遍历与target比较, 找出最接近的三个数
    3. 对于指针,一个是固定的i, 一个是start-> i+1, 一个是end->length-1
    4. min_value = nums[0] + nums[1] + nums[2]
    5. temp = nums[i] + nums[start] + nums[end]
    6. 比较abs(target - min_value)和abs(target - temp)
    7. 然后比较target和temp
    8. 当end<=start时,退出循环
    9. 开始利用i遍历数组, 直到i遍历结束,整个结束
    10. 2~9的时间复杂度是O(n^2)
    所以总的时间复杂度是O(n^2).若使用暴力法,则是O(n^3)

代码

class Solution(object):
    def threeSumClosest(self, nums, target):       
        nums.sort()
        n = len(nums)
        min_value = nums[0] +nums[1] + nums[2]
        for i in range(n):
            start = i+1
            end = n-1
            while start < end:
                temp = nums[i] + nums[start] +nums[end]
                if abs(target - temp) < abs(target - min_value):
                    min_value = temp
                if temp < target:
                    start += 1
                elif temp > target:
                    end -=1
                else:
                    return min_value
        return min_value
上一篇 下一篇

猜你喜欢

热点阅读