• 【leetcode】1395. Count Number of Teams


    题目如下:

    There are n soldiers standing in a line. Each soldier is assigned a unique rating value.

    You have to form a team of 3 soldiers amongst them under the following rules:

    • Choose 3 soldiers with index (ijk) with rating (rating[i]rating[j]rating[k]).
    • A team is valid if:  (rating[i] < rating[j] < rating[k]) or (rating[i] > rating[j] > rating[k]) where (0 <= i < j < k < n).

    Return the number of teams you can form given the conditions. (soldiers can be part of multiple teams).

    Example 1:

    Input: rating = [2,5,3,4,1]
    Output: 3
    Explanation: We can form three teams given the conditions. (2,3,4), (5,4,1), (5,3,1). 
    

    Example 2:

    Input: rating = [2,1,3]
    Output: 0
    Explanation: We can't form any team given the conditions.
    

    Example 3:

    Input: rating = [1,2,3,4]
    Output: 4

    Constraints:

    • n == rating.length
    • 1 <= n <= 200
    • 1 <= rating[i] <= 10^5

    解题思路:这个题目不难。假设把rating[i]放在三个人的中间,我们只需要分别求出rating[i]左边比其大和比其小的元素的个数,以及分别求出rating[i]右边比其大和比其小的元素的个数,最后左边小的个数*右边大的个数+左边大的个数*右边小的个数,即为rating[i]放在三个人的中间时可以组成的排列数的总数。

    代码如下:

    class Solution(object):
        def numTeams(self, rating):
            """
            :type rating: List[int]
            :rtype: int
            """
            res = 0
            for i in range(1,len(rating)-1):
                left_small = 0
                left_great = 0
                for j in range(i):
                    if rating[i] > rating[j]:
                        left_small += 1
                    elif rating[i] < rating[j]:
                        left_great += 1
    
                right_small = 0
                right_great = 0
                for j in range(i+1,len(rating)):
                    if rating[i] > rating[j]:
                        right_small += 1
                    elif rating[i] < rating[j]:
                        right_great += 1
    
                res += left_small * right_great
                res += left_great * right_small
                #print rating[i],left_small,left_great,right_small,right_great
            return res
  • 相关阅读:
    博客园
    未释放的已删除文件
    ssh连接缓慢
    剑指 Offer 38. 字符串的排列
    剑指 Offer 37. 序列化二叉树
    剑指 Offer 50. 第一个只出现一次的字符
    剑指 Offer 36. 二叉搜索树与双向链表
    剑指 Offer 35. 复杂链表的复制
    剑指 Offer 34. 二叉树中和为某一值的路径
    剑指 Offer 33. 二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/seyjs/p/12631498.html
Copyright © 2020-2023  润新知