tag4:数组- 最大子序和+买卖股票的最佳时机+找到数组中消失的数字

leetcode53. 最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4]

输出: 6

解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶:

如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

思路:

1、标识前面的累加和和最大值

2、判断累加和以及最大值的处理

代码如下:

class Solution:

    def maxSubArray(self, nums: List[int]) -> int:      

        stmp=nums[0]

        smax=nums[0]       

        for i in range(1,len(nums)):

            if stmp>0:

                stmp=stmp+nums[i]

                smax=max(stmp,smax)

            else:

                stmp=nums[i]

                smax=max(stmp,smax)

        return smax

leetcode121. 买卖股票的最佳时机

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。

注意:你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]

输出: 5

解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。

    注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

输入: [7,6,4,3,1]

输出: 0

解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

思路:

本质上求序列的最小值和当前值的差值,取最大,默认值为0

代码如下:

class Solution:

    def maxProfit(self, prices: List[int]) -> int:

       if len(prices)==0:

           return 0

       smax=0

       min1=prices[0]

       for i in range(1,len(prices)):

           min1=min(min1,prices[i])

           smax=max(smax,prices[i]-min1)

       return smax

leetcode448. 找到所有数组中消失的数字

给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。

找到所有在 [1, n] 范围之间没有出现在数组中的数字。

您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。

示例:

输入:

[4,3,2,7,8,2,3,1]

输出:

[5,6]

思路:

修改数组,讲出现过元素作为索引同时将值置为小于0的值,再判断大于0的索引为未出现过的值

代码如下:

class Solution(object):

    def findDisappearedNumbers(self, nums):

        """

        :type nums: List[int]

        :rtype: List[int]

        """

        result=[]

        for i in range(len(nums)):

            newindex=abs(nums[i])-1

            if nums[newindex]>0:

                nums[newindex]*=-1

        for j in range(len(nums)):

             if nums[j]>0:

                 result.append(j+1)

        return result

你可能感兴趣的:(tag4:数组- 最大子序和+买卖股票的最佳时机+找到数组中消失的数字)