454
python
class Solution(object):
def fourSumCount(self,nums1,nums2,nums3,nums4):
hashmap = dict()
for n1 in nums1:
for n2 in nums2:
hashmap[n1+n2] = hashmap.get(n1 + n2,0) + 1
count = 0
for n3 in nums3:
for n4 in nums4:
key = -n3 - n4
if key in hashmap:
count += hashmap[key]
return count
383
python
from collections import defaultdict
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
hashmap = defaultdict(int)
for x in magazine:
hashmap[x] += 1
for x in ransomNote:
value = hashmap.get(x)
if not value:
return False
else:
hashmap[x] -= 1
return True
15
python
class Solution:
def threeSum(self,nums:List[int]) -> List[List[int]]:
result = []
nums.sort()
for i in range(len(nums)):
if nums[i] >0:
return result
if i > 0 and nums[i] == nums[i-1]:
continue
left = i + 1
right = len(nums) - 1
while right > left:
sum_ = nums[i] + nums[left] + nums[right]
if sum_ < 0 :
left += 1
elif sum_ > 0 :
right -= 1
else:
result.append([nums[i],nums[left],nums[right]])
while right > left and nums[right] == nums[right-1]:
right -= 1
while right > left and nums[left] == nums[left + 1]:
left += 1
right -=1
left +=1
return result
18
python
class Solution:
def fourSum(self,nums:List[int],target:int) -> List[List[int]]:
nums.sort()
n = len(nums)
result = []
for i in range(n):
if nums[i] > target and nums[i] > 0 and target > 0:
break
if i > 0 and nums[i] == nums[i-1]:
continue
for j in range(i+1,n):
if nums[i] + nums[j] >target and target > 0:
break
if j > i + 1 and nums[j] == nums[j-1]:
continue
left,right = j + 1, n -1
while left < right :
s = nums[i] + nums[j] + nums[left] + nums[right]
if s == target:
result.append([nums[i],nums[j],nums[left],nums[right]])
while left < right and nums[left] == nums[left + 1]:
left += 1
while left < right and nums[right] == nums[right-1]:
right -=1
left += 1
right -=1
elif s < target:
left += 1
else:
right -=1
return result