日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python HackerRank 刷题 Pairs

發布時間:2023/12/20 python 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。