算法——枚举

枚举算法又称穷举法

它的基本思想是:

        根据提出的问题枚举出所有可能的状态,并用问题给定的约束条件进行检验,判断那些状态是需要的,那些是不需要的,能够使得命题成立的状态,即为其解

它的结构是:

        循环 + 判断语句

接下来就做个力扣题,体会一下:

        给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。

         如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。

                 0 <= i < j < k < arr.length

                |arr[i] - arr[j]| <= a

                |arr[j] - arr[k]| <= b

                |arr[i] - arr[k]| <= c

        其中 |x| 表示 x 的绝对值。 返回 好三元组的数量 。

        示例:

        输入:arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3

        输出:4

        解释:一共有 4 个好三元组:[(3,0,1), (3,0,1), (3,1,1), (0,1,1)] 。 

解题思路:

        这个思路很简单,就是将各种情况列举出来,然后进行逐个判断,若是有满足题中条件的,就将计数加1

废话不多说,直接上代码:

class Solution(object):
    def countGoodTriplets(self, arr, a, b, c):
        """
        :type arr: List[int]
        :type a: int
        :type b: int
        :type c: int
        :rtype: int
        """
        # 记录满足条件的个数
        res = 0
        
        # 将每一种情况遍历出来
        for i in range(len(arr)):
            for j in range(i+1,len(arr)):
                for k in range(j+1,len(arr)):
                    # 对每一种情况进行判断,若是有符合题意的,就将记录数加一
                    if i < j < k and abs(arr[i]-arr[j]) <= a\
                        and abs(arr[j]-arr[k]) <= b and abs(arr[i]-arr[k]) <= c:
                            res += 1
                        
        # 最后将满足条件的个数返回
        return res



def main():
    arr = [3, 0, 1, 1, 9, 7]
    a,b,c = 7,2,3
    
    solution = Solution()
    res = solution.countGoodTriplets(arr,a,b,c)
    print(res)

if __name__ == '__main__':
    main()

运行结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值