zoukankan      html  css  js  c++  java
  • Leetcode: 825. Friends Of Appropriate Ages

    Description

    Some people will make friend requests. The list of their ages is given and ages[i] is the age of the ith person. 
    
    Person A will NOT friend request person B (B != A) if any of the following conditions are true:
    
        age[B] <= 0.5 * age[A] + 7
        age[B] > age[A]
        age[B] > 100 && age[A] < 100
    
    Otherwise, A will friend request B.
    
    Note that if A requests B, B does not necessarily request A.  Also, people will not friend request themselves.
    
    How many total friend requests are made?
    
    

    Example

    Input: [16,16]
    Output: 2
    Explanation: 2 people friend request each other.
    
    

    Note

        1 <= ages.length <= 20000.
        1 <= ages[i] <= 120.
    
    

    Code

    Wrong Solution
    
    class Solution(object):
        def numFriendRequests(self, ages):
            """
            :type ages: List[int]
            :rtype: int
            """
            
            N = len(ages)
            nums = [0]*121
            
            for i in ages:
                nums[i] += 1
                
            dp =  [0]*121
            for i in range(1, 121):
                dp[i] = dp[i-1] + nums[i]
            
            ret = 0
            
            for i in range(120, 0, -1):
                if nums[i] == 0:
                    continue
                ret += nums[i]*(nums[i]-1)  // 在过滤条件前修改数据,我的思维习惯不是很干净
                th = i//2 + 7
                if th >= i:
                    continue
                ret += nums[i]* (dp[i-1] - dp[th])
                
            return ret
    
    
    AC Solution
    class Solution(object):
        def numFriendRequests(self, ages):
            """
            :type ages: List[int]
            :rtype: int
            """
            
            N = len(ages)
            nums = [0]*121
            
            for i in ages:
                nums[i] += 1
                
            dp =  [0]*121
            for i in range(1, 121):
                dp[i] = dp[i-1] + nums[i]
            
            ret = 0
            
            for i in range(120, 0, -1):
                if nums[i] == 0:
                    continue
                th = i//2 + 7
                if th >= i:
                    continue
                ret += nums[i]*(nums[i]-1)
                ret += nums[i]* (dp[i-1] - dp[th])
                
            return ret
            
    
    

    总结

    犯了思维不干净的错误的题目
    1524. Number of Sub-arrays With Odd Sum  
    
  • 相关阅读:
    JavaScript常用正則表達式
    详尽解析window.event对象
    DWR的类却无法在js里用
    javascript控制小数点精度
    49. Group Anagrams
    48. Rotate Image
    64. Minimum Path Sum
    63. Unique Paths II
    62. Unique Paths
    53. Maximum Subarray
  • 原文地址:https://www.cnblogs.com/tmortred/p/14495244.html
Copyright © 2011-2022 走看看