zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    Fluent动网格【8】:网格节点运动案例
    Fluent动网格【7】:网格节点运动
    Fluent动网格【6】:部件变形案例
    Fluent动网格【5】:部件变形
    Fluent动网格【4】:DEFINE_CG_MOTION宏实例
    Fluent动网格【3】:DEFINE_CG_MOTION宏
    Fluent动网格【1】:概述
    Fluent动网格【2】:Profile文件
    JavaScript系列--浅析原型链与继承
    简单说说JavaScript的Generator 实现(ES6)
  • 原文地址:https://www.cnblogs.com/seyjs/p/12631498.html
Copyright © 2011-2022 走看看