您的位置:首页 > 大数据 > 人工智能

K-diff Pairs in an Array

2017-03-05 15:21 267 查看
leetcode第532题,竞赛题,虽然标签是easy,结果我想了很长时间,而且代码相当繁琐,不过我这里没有使用hashset之类可以自动去重的工具,除了使用了map之外,其余的都是正常的逻辑了。

一点点分析,首先,如果k是个负数,则可以直接返回0.

接下来k就要分情况了,分成k是0和不是0的情况,这样做确实很繁琐,但是可以通过测试样例。

使用一个字典记录已经用到的数,另一个字典记录绝对值差为k的那些数,一边遍历一边搜索。注意,这里要记录出现绝对值差k数的频次,一旦有可以匹配的,就直接加上这个数目。另外,为了防止重复,有两个措施,一个是记录已经用到的数,如果再次出现再处理,另外针对k为0的情况,为了防止加入两遍绝对差为k的数,还要单独处理。

总之去重是个很繁琐的工作,也不敢保证还有没有遗漏的情况。

class Solution(object):
def findPairs(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
dNum = {}
n = len(nums)
d = {}
ans = 0
if k < 0:
return 0
else:
for i in range(n):
if k == 0:
if nums[i] in d and d[nums[i]] != 0:
ans += d[nums[i]]
d[nums[i]] = 0
else:
if nums[i] in d and d[nums[i]] != 0 and nums[i] not in dNum:
ans += d[nums[i]]
d[nums[i]] = 0
if nums[i] not in dNum:
if k == 0:
if nums[i] - k not in d:
d[nums[i] - k] = 1
else:
d[nums[i] - k] += 1
else:
if nums[i]-k not in d:
d[nums[i]-k] = 1
else:
d[nums[i]-k] += 1
if nums[i]+k not in d:
d[nums[i]+k] = 1
else:
d[nums[i]+k] += 1
dNum[nums[i]] = 1
#print d
return ans
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: