Python每日一练(20230414)

简介: Python每日一练(20230414)

1. 买卖股票的最佳时机 III


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

设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。


示例 1:

输入:prices = [3,3,5,0,0,3,1,4]

输出:6

解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。

随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3 。


示例 2:

输入:prices = [1,2,3,4,5]

输出:4

解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。    

注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。    

因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。


示例 3:

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

输出:0  

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


示例 4:

输入:prices = [1]

输出:0


提示:

   1 <= prices.length <= 10^5

   0 <= prices[i] <= 10^5

出处:

https://edu.csdn.net/practice/25557632

代码:


from typing import List
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if len(prices) == 0:
            return 0
        k = 2
        n = len(prices)
        dp_i_1_0 = 0
        dp_i_1_1 = -prices[0]
        dp_i_2_0 = 0
        dp_i_2_1 = -prices[0]
        for i in range(1, n):
            dp_i_1_0 = max(dp_i_1_0, dp_i_1_1 + prices[i])
            dp_i_1_1 = max(dp_i_1_1, -prices[i])
            dp_i_2_0 = max(dp_i_2_0, dp_i_2_1 + prices[i])
            dp_i_2_1 = max(dp_i_2_1, dp_i_1_0 - prices[i])
        return dp_i_2_0
#%%
s = Solution()
prices = [3,3,5,0,0,3,1,4]
print(s.maxProfit(prices))
prices = [1,2,3,4,5]
print(s.maxProfit(prices))
prices = [7,6,4,3,1]
print(s.maxProfit(prices))
prices = [1]
print(s.maxProfit(prices))

输出:

6

4

0

0


2. 统计成绩分布

随机产生10个[0,100]之间的整数,模拟5名学生的考试成绩。


要求:输出成绩,计算平均分,统计高于平均分的人数

出处:

https://edu.csdn.net/practice/25557633

代码:

import random
a=[]
sum=0
cnt=0
for i in range(10):
    x=random.randint(0,100)
    sum+=x
    print(x,end=" ")
    a.append(x)
ave=sum/10
print()
print(ave)
for i in range(10):
    if a[i]>ave:
        cnt+=1
print(cnt)

输出:

4 46 62 12 63 56 66 48 55 25  #(随机产生)

43.7

7


3. 分割回文串


给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

回文串 是正着读和反着读都一样的字符串。


示例 1:

输入:s = "aab"

输出:[["a","a","b"],["aa","b"]]


示例 2:

输入:s = "a"

输出:[["a"]]


提示:

   1 <= s.length <= 16

   s 仅由小写英文字母组成

出处:

https://edu.csdn.net/practice/25557634

代码:


from typing import List
class Solution(object):
    def partition(self, s):
        """
        :type s: str
        :rtype: List[List[str]]
        """
        if len(s) == 0:
            return []
        else:
            res = []
            self.dividedAndsel(s, [], res)
        return res
    def dividedAndsel(self, s, tmp, res):
        if len(s) == 0:
            res.append(tmp)
        for i in range(1, len(s) + 1):
            if s[:i] == s[:i][::-1]:
                self.dividedAndsel(s[i:], tmp + [s[:i]], res)
#%%
sol = Solution()
s = 'aab'
print(sol.partition(s))
s = 'a'
print(sol.partition(s))


输出:

[['a', 'a', 'b'], ['aa', 'b']]

[['a']]


目录
相关文章
|
Python 人工智能
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
271 1
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
|
Shell Unix Linux
Linux 终端命令之文件浏览(3) less
Linux 终端命令之文件浏览(3) less
200 0
Linux 终端命令之文件浏览(3) less
|
Rust
Rust 编程小技巧摘选(8)
Rust 编程小技巧摘选(8)
386 0
Rust 编程小技巧摘选(8)
|
算法 C++ 机器人
力扣 C++|一题多解之动态规划专题(1)
力扣 C++|一题多解之动态规划专题(1)
152 0
力扣 C++|一题多解之动态规划专题(1)
|
C++ Python 索引
Python Numpy入门基础(二)数组操作
Python Numpy入门基础(二)数组操作
213 0
Python Numpy入门基础(二)数组操作
|
C++ 存储
力扣C++|一题多解之数学题专场(1)
力扣C++|一题多解之数学题专场(1)
200 0
力扣C++|一题多解之数学题专场(1)
|
Java Go C++
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
178 0
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
|
Java Go C++
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
212 0
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
|
Java Go C++
Golang每日一练(leetDay0110) 零钱兑换I\II Coin Change
Golang每日一练(leetDay0110) 零钱兑换I\II Coin Change
205 0
Golang每日一练(leetDay0110) 零钱兑换I\II Coin Change
|
Java Go Rust
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
176 0
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II

热门文章

最新文章

推荐镜像

更多