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+n1m1,但是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 买卖股票的最佳时机 不同路径的主要内容,如果未能解决你的问题,请参考以下文章

代码随想录算法训练营第四十九天| 121 买卖股票的最佳时机 122 买卖股票的最佳时机II

LeetCode目录

122. 买卖股票的最佳时机 II

122. 买卖股票的最佳时机 II

买卖股票的最佳时机 II

LC 买卖股票的最佳时机 II