Python HackerRank 刷题 Pairs
生活随笔
收集整理的這篇文章主要介紹了
Python HackerRank 刷题 Pairs
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目地址:?https://www.hackerrank.com/challenges/pairs/problem?isFullScreen=false
翻譯:返回list中任意兩元素差值絕對值=k的最大組合數。例子如下:
難度:Medium
解題
正常做法:先輸出全部長度為2的組合,再遍歷兩兩求差比較。
from itertools import combinationsdef pairs(k, a):# Write your code heretemp = [i for i in combinations(arr, 2)]r = [ 1 if abs(i[0] - i[1]) == k else 0 for i in temp]return sum(r)耗時嚴重無法通過全部case。換個思路,先排序,然后兩個指針遍歷兩兩組合,當差值≥k的時候break,并且計數+1。
def pairs(k, a):# Write your code herect = 0a.sort()for i in range(len(a) - 1):for j in range(0, len(a)):if a[j] - a[i] > k:breakelif a[j] - a[i] == k:ct += 1breakreturn ct通過了一部分case,仍然有部分無法通過。再進一步優化,充分利用排序后的數組,當差值=k時,break之后 j 沒必要再從0開始遍歷。
def pairs(k, a):# Write your code herect = 0a.sort()st = 1for i in range(len(a) -1 ):for j in range(st, len(a)):if a[j] - a[i] > k:breakelif a[j] - a[i] == k:ct += 1st = j+1breakreturn ct搞定完事。
總結
以上是生活随笔為你收集整理的Python HackerRank 刷题 Pairs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生成器和推导式
- 下一篇: 简明 Python 教程