加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

【python-leetcode259-双指针】三个数的最小和

发布时间:2020-12-20 09:55:16 所属栏目:Python 来源:网络整理
导读:问题描述: Example:Given an array of n integers nums and a target,find the number of index triplets i,j,k with 0 = i j k n that satisfy the condition nums[i] + nums[j] + nums[k] target.For example,given nums = [-2,1,3], and target = 2 .Ret

问题描述:

Example:

Given an array of n integers nums and a target,find the number of index triplets i,j,k with 0 <= i < j < k < n that satisfy the condition nums[i] + nums[j] + nums[k] < target.

For example,given nums = [-2,1,3],and target = 2.

Return 2. Because there are two triplets which sums are less than 2:

[-2,1] [-2,3]

Follow up: Could you solve it in O(n2) runtime?

大致意思是给定一个数组和一个目标值,求出所有三个数的和小于目标值的总数。

解题:

class Solution(object):
    def threeSumSmaller(self,nums: List[int],target: int) -> int:    
        #如果nums为空或者长度小于3,直接返回0
        if not nums and len(nums) < 3:
            return 0
        先排序    
        nums.sort()
        如果前三个数的和都大于或等于target,直接返回0
        if nums[0]+nums[1]+nums[2]>=target:
            保存结果
        res =从左到右依次遍历
        for i in range(0,len(nums)):
            左指针和右指针
            l,r = i + 1,len(nums) - 1
            循环条件,核心就是下标为i的数为核心
            逐渐增大左指针指向的值,减小右指针指向的值,以匹配所有情况
            while l < r:
                如果当前三个值和小于target,此时说明以i,l~r之间组成都可以,比如[-2,target=2
                [-2,3]是可行的,那么左指针不变,右指针一直左移,这时都是符合条件的
                if nums[i] + nums[l] + nums[r] < target:
                    res += r - l
                    再让左指针右移,判断下一种情况
                    l += 1
                else:
                    如果当前三个数值大于或等于target,需要让右指针左移使值变小些
                    r -= 1
    return res

输入:[-2,3]   输出:2

是一道会员题,提交不了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读