题目:计算两组数的中位数(由小到大排列)
nums1=[1,3]
nums2=[2,4]
num=[0 for i in range(len(nums1)+len(nums2))]
count=0
j=0
i=0
while count<len(nums1)+len(nums2):
if nums1[i]<nums2[j]:
num[count]=nums1[i]
count+=1
i+=1
if i==len(nums1):
for t1 in range(len(nums2[j:])):
num[count]=nums2[t1+j]
count+=1
else:
continue
else:
num[count]=nums2[j]
count+=1
j+=1
if j==len(nums2):
for t2 in range(len(nums1[i:])):
num[count]=nums1[t2+i]
count+=1
else:
continue
length=len(num)
prep=length%2
position=length/2
if prep==0:
print(num[int(position)-1],num[int(position)])
else:
print(int(num[position]))
这是我第一次编写的,看似是对的,输出常规的数据时也不会报错
但是,很显然我忽略了数组为空的情况
面对空数组我想到的办法是,直接判断数组是否为空
所以我做出了如下改进
nums1=[]
nums2=[1]
num=[0 for i in range(len(nums1)+len(nums2))]
count=0
j=0
i=0
if len(nums1)==0:
num=nums2
elif len(nums2)==0:
num=nums1
else:
while count<len(nums1)+len(nums2):
if nums1[i]<nums2[j] and i<len(nums1) or j>len(nums2):
num[count]=nums1[i]
count+=1
i+=1
if i==len(nums1):
for t1 in range(len(nums2[j:])):
num[count]=nums2[t1+j]
count+=1
else:
continue
elif nums2[j]<=nums1[i] and j<len(nums2) or i>len(nums1):
num[count]=nums2[j]
count+=1
j+=1
if j==len(nums2):
for t2 in range(len(nums1[i:])):
num[count]=nums1[t2+i]
count+=1
else:
continue
length=len(num)
prep=length%2
position=length/2
if prep==0:
print((num[int(position)-1]+num[int(position)])/2)
else:
print(int(num[int(position)]))
这么编写可以面对所有的情形,但是时间复杂度偏高,正在想办法改进中...
题目:给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
height=[1,8,6,2,5,4,8,3,7]
left = 0
right = len(height) - 1
area = 0
while left < right:
cur = min(height[left], height[right]) * (right - left)
area = max(area, cur)
if height[left] < height[right]:
left += 1
else:
right -= 1
print(area)
利用双指针进行遍历得到答案