算法面试40讲4

24、贪心算法

只适用于是倍数的情况,当面值是10,9,1的时候,组成18,贪心就不试用(10+8*1与9*2)

25、买卖股票的最佳时机

搜索+贪心+动态规划

下面这个是贪心算法的代码。其他两种还在学

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit=0
        for i in range(len(prices)-1):
            if prices[i+1]>prices[i]:
                profit +=prices[i+1]-prices[i]
        return profit

26、广度优先搜索(BFS-Breadth-First-Search)

27、深度优先搜索

28、二叉树层次遍历

一定要记住:visited不能忘记了,在图里面这个很关键

DFS的解法:

29、二叉树的最大和最小深度

DFS:代码

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root: return 0
        
        queue=[]
        visited=[]
        queue.append(root)
        length=0
        while queue:
            len1=len(queue)
            length+=1
            for i in range(len1):
                node=queue.pop(0)
                if node.left:
                    queue.append(node.left)

                if node.right:    
                    queue.append(node.right)
        return length
#广度优先的代码

30、生成有效括号组合

1、数学归纳法

 

2、递归搜索

 

3、剪枝

代码:两个差不多。都是递归+剪枝的思想:

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        self.list=[]
        self._gen(0,0,n,"")
        return self.list
    
    def _gen(self,left,right,n,result):
        
        #递归终止条件
        if left==n and right==n:
            self.list.append(result)
            return


        if left<n:
            self._gen(left+1,right,n,result+"(")
        
        if left>right and right<n:
            
            self._gen(left,right+1,n,result+")")
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        self.list=[]
        self._gen(n,n,n,"")
        return self.list
    
    def _gen(self,left,right,n,result):
        
        if left==0 and right==0:
            self.list.append(result)
            return
        if left>0:
            self._gen(left-1,right,n,result+"(")
        
        if right>left and right>0:
            
            self._gen(left,right-1,n,result+")")

参考:https://mp.csdn.net/postedit/90546725

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值