lintcode入门篇二

本秂侑毒 提交于 2020-01-12 01:20:36

一. 最大子数组

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。

样例

样例1:

输入:[−2,2,−3,4,−1,2,1,−5,3]
输出:6
解释:符合要求的子数组为[4,−1,2,1],其最大和为 6。

样例2:

输入:[1,2,3,4]
输出:10
解释:符合要求的子数组为[1,2,3,4],其最大和为 10。

挑战

要求时间复杂度为O(n)

注意事项

子数组最少包含一个数

输入测试数据 (每行一个参数)如何理解测试数据?
第一种解法:O(n)时间复杂度
class Solution:
    """
    @param nums: A list of integers
    @return: A integer indicate the sum of max subarray
    """
    def maxSubArray(self, nums):
        # write your code here
        '''
        做两步判断:
        1.第一步判断:当n > 0 的时候,继续加。如果n小于0,则n取最新的数,之前的舍弃
        2.第二步判断:sum 和 继续加的n作比较,如果sum < n,那么sum = n,否则sum保持。
        
        '''
        sum = nums[0]
        n = nums[0]
        for i in range(1,len(nums)):
            if n > 0:
                n = n + nums[i]
            else:                  #一旦n < 0,舍弃,取新的值n进行继续相加
                n = nums[i]
            if sum < n: 
                sum = n
        return sum

第二种解法:O(n2)时间复杂度

def  MaxSumArray(nums):
    '''
    1.取出所有符合条件的顺序数组
    2.然后将所有顺序数组的值放在一个大的数组[]里面,最后返回里面的最大值max
    :param nums:
    :return:
    '''
    array = []
    for i in range(len(nums)):
        for j in range(i + 1,len(nums)):
            array.append(sum(nums[i:j]))
    return  max(array)
result = MaxSumArray([-2,2,-3,4,-1,2,1,-5,3])
print(result)

二. 最小子数组

给定一个整数数组,找到一个具有最小和的连续子数组。返回其最小和。

样例

样例 1

输入:[1, -1, -2, 1]
输出:-3

样例 2

输入:[1, -1, -2, 1, -4]
输出:-6

注意事项

子数组最少包含一个数字

class Solution:
    """
    @param: nums: a list of integers
    @return: A integer indicate the sum of minimum subarray
    """
    def minSubArray(self, nums):
        # write your code here
        '''
        1.负数一直相加,一旦大于0,则被替换
        2.sum 记录之前保存最小值的和,如果一旦有出现更小的和的话,则被替换
        :param nums:
        :return:
        '''
        n = nums[0]
        sum = nums[0]
        for i in range(1,len(nums)):
            if n < 0:
                n = n + nums[i]
            else:
                n = nums[i]
            if sum > n:
                sum = n
        return sum 

三. 数组剔除元素后的乘积

中文English

给定一个整数数组A。
定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。请输出B。

样例

样例 1

输入: A = [1, 2, 3]
输出: [6, 3, 2]
解析:B[0] = A[1] * A[2] = 6; B[1] = A[0] * A[2] = 3; B[2] = A[0] * A[1] = 2
class Solution:
    """
    @param: nums: Given an integers array A
    @return: A long long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]
    """
    def productExcludeItself(self, nums):
        # write your code here
        array = []
        for i in range(len(nums)):
            sum = 1
            for j in range(len(nums)):
                if i != j:
                    sum = sum * nums[j]
            array.append(sum)
        return array

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!