4. 寻找两个正序数组的中位数
class Solution:
def findMedianSortedArrays(self, nums1, nums2):
nums1.extend(nums2)
nums1.sort()
if len(nums1)%2 == 0:
i = int(len(nums1)/2)
return (nums1[i-1] +nums1[i])/2
else:
i = int((len(nums1)+1)/2)
return nums1[i-1]
不用sort()
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
len1 = len(nums1)
len2 = len(nums2)
flag1 = 0
flag2 = 0
conlist = []
while(True):
if flag1 < len1 and flag2 < len2:
if nums1[flag1] < nums2[flag2]:
conlist.append(nums1[flag1])
flag1 +=1
else:
conlist.append(nums2[flag2])
flag2 +=1
elif flag1 >= len1 and flag2 < len2:
conlist.append(nums2[flag2])
flag2 +=1
elif flag1 < len1 and flag2 >= len2:
conlist.append(nums1[flag1])
flag1 +=1
else:
break
if (len1+len2)%2!=0:
return conlist[(len1+len2)//2]
else:
return (conlist[(len1+len2)//2-1] + conlist[(len1+len2)//2])/2
return conlist[(len1+len2)//2]
三数之和
会超时
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
result = []
lens = len(nums)
for i in range(lens):
for j in range(i+1,lens):
a = nums[j+1:]
if -(nums[i]+nums[j]) in a:
result.append([nums[i],nums[j],-(nums[i]+nums[j])])
re1 = []
for re in result:
re.sort()
if re not in re1:
re1.append(re)
return re1
方法2
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
if len(nums) < 3:
return []
nums.sort()
res = []
for i in range(len(nums)):
if nums[i] > 0:
return res #如果剩下的数列第一个数字就大于0
if i > 0 and nums[i] == nums[i-1]:
continue
else:
L = i+1
R = len(nums)-1
while L 0:
R -= 1
return res
75. 颜色分类
class Solution:
def sortColors(self, nums: List[int]) -> None:
nums.sort()
return nums
双指针
class Solution:
def sortColors(self, nums: List[int]) -> None:
n = len(nums)
i = 0
p0, p2 = 0, n-1
while i <= p2:
while i <= p2 and nums[i] == 2:
nums[i], nums[p2] = nums[p2], nums[i]#把2换到最后
p2 -= 1
if nums[i] == 0:
nums[i], nums[p0] = nums[p0], nums[i]#把0换到最开头
p0 += 1
i += 1
return nums