在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Some people will make friend requests. The list of their ages is given and Person A will NOT friend request person B (B != A) if any of the following conditions are true:
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 1: Input: [16,16] Output: 2 Explanation: 2 people friend request each other. Example 2: Input: [16,17,18] Output: 2 Explanation: Friend requests are made 17 -> 16, 18 -> 17. Example 3: Input: [20,30,100,110,120] Output: Explanation: Friend requests are made 110 -> 100, 120 -> 110, 120 -> 100. Notes:
人们会互相发送好友请求,现在给定一个包含有他们年龄的数组, 当满足以下条件时,A 不能给 B(A、B不为同一人)发送好友请求:
否则,A 可以给 B 发送好友请求。 注意如果 A 向 B 发出了请求,不等于 B 接受了 A 的请求。而且,人们不会给自己发送好友请求。 求总共会发出多少份好友请求? 示例 1: 输入: [16,16] 输出: 2 解释: 二人可以互发好友申请。 示例 2: 输入: [16,17,18] 输出: 2 解释: 好友请求可产生于 17 -> 16, 18 -> 17. 示例 3: 输入: [20,30,100,110,120] 输出: 3 解释: 好友请求可产生于 110 -> 100, 120 -> 110, 120 -> 100. 说明:
Runtime: 240 ms
Memory Usage: 19.4 MB
1 class Solution { 2 func numFriendRequests(_ ages: [Int]) -> Int { 3 var res:Int = 0 4 var numInAge:[Int] = [Int](repeating:0,count:121) 5 var sumInAge:[Int] = [Int](repeating:0,count:121) 6 for age in ages 7 { 8 numInAge[age] += 1 9 } 10 for i in 1...120 11 { 12 sumInAge[i] = numInAge[i] + sumInAge[i - 1] 13 } 14 for i in 15...120 15 { 16 if numInAge[i] == 0 {continue} 17 var cnt:Int = sumInAge[i] - sumInAge[Int(Double(i) * 0.5 + 7)] 18 res += cnt * numInAge[i] - numInAge[i] 19 } 20 return res 21 } 22 } 268ms 1 class Solution { 2 func numFriendRequests(_ ages: [Int]) -> Int { 3 var count = [Int](repeating: 0, count: 121) 4 for age in ages { count[age] += 1 } 5 6 var ans = 0 7 for ageA in 0...120 { 8 let countA = count[ageA] 9 for ageB in 0...120 { 10 let countB = count[ageB] 11 if (ageA + 14) >= 2*ageB { continue } 12 if ageA < ageB { continue } 13 if ageA < 100 && 100 < ageB { continue } 14 ans += countA * countB 15 if ageA == ageB { ans -= countA} 16 } 17 } 18 return ans 19 } 20 } 292ms 1 class Solution { 2 func numFriendRequests(_ ages: [Int]) -> Int { 3 var map = [Int: Int]() 4 for age in ages { 5 map[age] = (map[age] ?? 0) + 1 6 } 7 var result = 0 8 for i in 0...120 { 9 if let iCount = map[i] { 10 for j in 0...120 { 11 if let jCount = map[j] { 12 if j <= i / 2 + 7 || j > i || (j > 100 && i < 100) { 13 continue 14 } 15 if i == j { 16 result += (iCount - 1) * iCount 17 } else { 18 result += iCount * jCount 19 } 20 } 21 } 22 } 23 } 24 return result 25 } 26 } 404ms 1 class Solution { 2 func numFriendRequests(_ ages: [Int]) -> Int { 3 var ageCounts = [Int](repeating: 0, count: 121) 4 for age in ages { 5 ageCounts[age] += 1 6 } 7 var res = 0 8 for i in 0..<ageCounts.count { 9 var ageA = i 10 for j in 0..<ageCounts.count { 11 var ageB = j 12 if ageB <= Int(floor(0.5 * Double(ageA) + 7)) { continue } 13 if ageB > ageA { continue } 14 res += ageCounts[i] * ageCounts[j] 15 if ageA == ageB { 16 res -= ageCounts[i] 17 } 18 } 19 } 20 return res 21 } 22 }
|
请发表评论