面试题41:数据流中的中位数
题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.nums = []
def Insert(self, num):
self.nums.append(num)
def GetMedian(self, fuck):
self.nums.sort()
if len(self.nums) % 2 == 1:
return self.nums[(len(self.nums) - 1) / 2]
else:
return (self.nums[len(self.nums) / 2] + self.nums[len(self.nums) / 2 - 1]) / 2.0
面试题42:连续子数组的最大和
题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。
思路:采用动态规划的思路。
- 首先仔细观察数组的规律,可以得到下列动态规划的式子:
(1)如果i==0 或者 F[i-1]<=0 那么 F[i] = A[i]
(2)如果i!=0 并且 F[i-1]>0 那么 F[i] = F[i-1] + A[i]
# -*- coding:utf-8 -*-
class Solution:
def FindGreatestSumOfSubArray(self, array):
# write code here
# #动态规划的思想
# #res存储历史之和的最大值
res = array[0]
sum = res
for i in range(1,len(array)):
if sum>0:
sum = sum + array[i]
else:
sum = array[i]
#这一步很关键,不要忘记
if sum>res:
res = sum
return res
s = Solution()
print s.FindGreatestSumOfSubArray([1,-2,3,10,-4,7,2,-5])