题目:计算两组数的中位数(由小到大排列)

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)

利用双指针进行遍历得到答案