Day6 环形链表 II 买卖股票的最佳时机 不同路径
Posted 未来可期-2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day6 环形链表 II 买卖股票的最佳时机 不同路径相关的知识,希望对你有一定的参考价值。
环形链表II
和上一个环形链表I类似,设置一个快慢指针,设从head到环形入口有a个节点,环形入口到环形结尾有b个节点,首先快指针一次走两格,慢指针一次走一格,fast=2*slow;其次,fast指针在环形绕了n圈和slow指针相遇,则fast=slow+nb;由上面两个公式,则slow=nb;slow指针想再到环形入口,步数必定为a+nb;则slow指针再走a步就能到达环形入口;但是a不知。可将fast指针指向head,然后fast指针和slow指针都走一格,直到再次相遇时两者指向环形入口。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def detectCycle(self, head):
fast=head
slow=head
while True:
if not fast or not fast.next:
return None
fast=fast.next.next
slow=slow.next
# 第一次相遇
if fast==slow:
fast=head
while fast!=slow:
fast=fast.next
slow=slow.next
return fast
class Solution(object):
def maxProfit(self, prices):
Max=0
minPrice=1<<31
for i in range(len(prices)):
Max=max(Max,prices[i]-minPrice)
minPrice=min(minPrice,prices[i])
return Max
不同路径
m行n列,可以直接用排列组合做。路径总数为
C
m
+
n
−
1
m
−
1
C_m+n-1^m-1
Cm+n−1m−1,但是m和n的数都比较大,100多吧,直接求组合数不好求,使用dp解决问题。dp[i][j] 表示原点到(i,j)的路径数,只能从左边和上面转移到该模块,则状态转移方程为dp[i][j]=dp[i-1][j]+dp[i][j-1]。
class Solution(object):
def uniquePaths(self, m, n):
dp=[[1]*n]+[([1]+[0]*(n-1)) for _ in range(m-1)]
# dp[i][j] 表示原点到(i,j)的路径数
for i in range(1,m):
for j in range(1,n):
# 状态转移方程
dp[i][j]=dp[i-1][j]+dp[i][j-1]
return dp[-1][-1]
以上是关于Day6 环形链表 II 买卖股票的最佳时机 不同路径的主要内容,如果未能解决你的问题,请参考以下文章