zoukankan      html  css  js  c++  java
  • 《极客时间--算法面试》--递归和分治

    目录

      递归

      分治

    1、求指数

    n的阶乘的计算法方式。

    递归的必要条件

      参数里面有明显的层级,level。

      递归的终止条件。大多数在最前面

      数据的处理

      调用下一层

      解决完下一层的任务后做的工作(按需)

     分治

    分治思路:

      明确问题problem

      明确终止条件

      准备数据并将大问题拆分成小问题

      对子问题进行解决

      对子结果进行合并

     Pow(x,n)

    https://leetcode-cn.com/problems/powx-n/submissions/

    思路:

      一、如果采用循环遍历的话,将是O(n)时间复杂度

      二、如果采用分治思想的话将是logn时间复杂度

    代码:

    class Solution(object):
        def myPow(self, x, n):
            """
            :type x: float
            :type n: int
            :rtype: float
            """
            if n<0:                         #如果是负数幂
                x = 1/x                     #结果是倒数
                n = -n                      #将n转为正数
            Pow = 1                         #累计结果值
            while n:                        #循环遍历
                if n&1:     
                    Pow *= x                #如果是奇数的话就会多乘一次
                x *= x                      #x自身累乘
                n = n>>1                    #右移是除以2
            return Pow                      #最终返回结果值

    众数

    https://leetcode-cn.com/problems/majority-element/submissions/

    思路:

      一、采用暴力进行求解,时间复杂度为n平方

      二、采用集合统计次数,世间复杂度为O(n)

      三、采用排序的方式,平均下快排是最快的nlogn时间复杂度

      四、分治的思想

    代码:

    class Solution(object):
        def majorityElement(self, nums):
            """
            :type nums: List[int]
            :rtype: int
                                            #这个代码和下面的思路一样,更多采用了集合进行缓存
            dic = {}
            for item in nums:
                if item not in dic:
                    dic[item] = 1
                else:
                    dic[item] += 1
            value = 0
            for item in dic:
                if dic[item] >value:
                    key = item
                    value = dic[item]
            if value>len(nums)/2:
                return key
            """
            for item in set(nums):                  #遍历元素,set是去重复
                if nums.count(item)>len(nums)/2:    #对元素个数进行技术,符合条件
                    return item                     #返回元素值   
  • 相关阅读:
    Zookeeper
    激活函数
    线程池
    用rand()和srand()产生伪随机数的方法总结 (转贴)
    连接SDE数据库代码
    ProgressBar
    ArcEngine+OpenGL之二系统平台搭建
    我所知道的ArcObjects开发(转)
    oracle wm_concat函数 乱码
    修改32位的AutoCAD2012,使其能在64位系统上安装
  • 原文地址:https://www.cnblogs.com/missidiot/p/10969118.html
Copyright © 2011-2022 走看看