文章目录
一,买卖股票的最佳时机 II
1,程序简介
-
给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。
-
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:
- 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
- 输入: prices = [7,1,5,3,6,4]
- 输出: 7
- 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 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。
提示:
- 1 < = p r i c e s . l e n g t h < = 3 ∗ 1 0 4 1 <= prices.length <= 3 * 10^4 1<=prices.length<=3∗104
- 0 < = p r i c e s [ i ] < = 1 0 4 0 <= prices[i] <= 10^4 0<=prices[i]<=104
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 30 19:24:55 2022
Function: 买卖股票的最佳时机 II
@author: 小梁aixj
"""
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
hold = 0
pric = []
temp = []
flag = 0
msum = 0
if len(prices) <= 2:
if not prices:
return 0
if len(prices) == 1:
return 0
if prices[0] > prices[1]:
return 0
if prices[0] < prices[1]:
return prices[1] - prices[0]
for i in range(len(prices) - 1):
if prices[i + 1] > prices[i] and hold != 1:
hold = 1
flag = i
continue
if prices[i + 1] < prices[i] and hold == 1:
pric.append(prices[flag])
pric.append(prices[i])
hold = 0
else:
continue
for i in range(0, len(pric), 2):
temp.append(pric[i + 1] - pric[i])
msum = sum(temp)
if hold == 1:
msum = msum + prices[-1] - prices[flag]
return msum
#%%
s = Solution()
print(s.maxProfit(prices = [7,1,5,3,6,4]))
3,运行结果
二,分数到小数
1,程序简介
-
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。
-
如果小数部分为循环小数,则将循环的部分括在括号内。
-
如果存在多个答案,只需返回 任意一个 。
-
对于所有给定的输入,保证 答案字符串的长度小于 1 0 4 10^4 104 。
示例 1:
- 输入:numerator = 1, denominator = 2
- 输出:“0.5”
示例 2:
- 输入:numerator = 2, denominator = 1
- 输出:“2”
示例 3:
- 输入:numerator = 2, denominator = 3
- 输出:“0.(6)”
示例 4:
- 输入:numerator = 4, denominator = 333
- 输出:“0.(012)”
示例 5:
- 输入:numerator = 1, denominator = 5
- 输出:“0.2”
提示:
- − 2 31 < = n u m e r a t o r , d e n o m i n a t o r < = 2 31 − 1 -2^{31} <= numerator, denominator <= 2^{31} - 1 −231<=numerator,denominator<=231−1
- d e n o m i n a t o r ! = 0 denominator != 0 denominator!=0
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 30 19:26:15 2022
Function: 分数到小数
@author: 小梁aixj
"""
class Solution(object):
def fractionToDecimal(self, numerator, denominator):
if numerator < 0 and denominator < 0:
numerator, denominator = -numerator, -denominator
u = (numerator < 0) ^ (denominator < 0)
numerator = abs(numerator)
denominator = abs(denominator)
numerator = numerator % denominator
if numerator == 0:
return str(numerator // denominator)
s = str(abs(numerator) // denominator) + "."
q = {}
l = []
while numerator < denominator:
numerator = numerator * 10
l.append(numerator)
q[numerator] = numerator // denominator
numerator = numerator % denominator * 10
while numerator not in q and numerator != 0:
l.append(numerator)
q[numerator] = numerator // denominator
numerator = numerator % denominator
numerator = numerator * 10
for i in range(0, len(l)):
if numerator == l[i]:
s = s + "("
s = s + str(q[l[i]])
if "(" in s:
s = s + ")"
if u:
s = "-" + s
return s
#%%
s = Solution()
print(s.fractionToDecimal(numerator = 1, denominator = 2))
3,运行结果
三,环形链表 II
1,程序简介
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。
说明:
- 不允许修改给定的链表。
进阶:
- 你是否可以使用 O(1) 空间解决此题?
示例 1:
- 输入:head = [3,2,0,-4], pos = 1
- 输出:返回索引为 1 的链表节点
- 解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
- 输入:head = [1,2], pos = 0
- 输出:返回索引为 0 的链表节点
- 解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
- 输入:head = [1], pos = -1
- 输出:返回 null
- 解释:链表中没有环。
提示:
- 链表中节点的数目范围在范围 [0, 1 0 4 10^4 104] 内
- − 1 0 5 < = N o d e . v a l < = 1 0 5 -10^5 <= Node.val <= 10^5 −105<=Node.val<=105
- pos 的值为 -1 或者链表中的一个有效索引
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 30 19:32:36 2022
Function: 环形链表 II
@author: 小梁aixj
"""
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def detectCycle(self, head):
s = set()
node = head
while node is not None:
if node in s:
return node
else:
s.add(node)
node = node.next
return None