zoukankan      html  css  js  c++  java
  • 面试之leetcode分治-求众数,x幂等

    1 leetcode50 计算 x 的 n 次幂函数。

    实现 pow(xn) ,即计算 x 的 n 次幂函数。

    (1)调用库函数

    (2)暴力o(N)

    (3)分治

    xxxxxx.......x   采用两端夹,如果是偶数 y=x的二分之n次方  result=y*y。如果是奇数,x的二分之n次方,result=y*y*x

    x(n)->x(n/2)->x(n/4).....x(0)  每次减半,logn

     1 class Solution(object):
     2     def myPow(self, x, n):
     3         """
     4         :type x: float
     5         :type n: int
     6         :rtype: float
     7         """
     8         if not n:
     9             return 1
    10         if n<0:
    11             return 1 / self.myPow(x,-n)
    12         if n%2:
    13             return x*self.myPow(x,n-1)
    14         return self.myPow(x*x,n/2)
    View Code

    非递归

     1 class Solution(object):
     2     def myPow(self, x, n):
     3         """
     4         :type x: float
     5         :type n: int
     6         :rtype: float
     7         
     8         if not n:
     9             return 1
    10         if n<0:
    11             return 1 / self.myPow(x,-n)
    12         if n%2:
    13             return x*self.myPow(x,n-1)
    14         return self.myPow(x*x,n/2)
    15         """
    16         if n<0:
    17             x=1/x
    18             n=-n
    19         pow=1
    20         while n:
    21             if n&1:
    22                 pow*=x
    23             x*=x
    24             n>>=1
    25         return pow
    View Code

    2 leetcode169 求众数

    (1)暴力 两个循环,针对每一个x进行计数,时间复杂度n平方

    (2)map,key为元素,value为count

    c++版本 时间复杂度0(n) 循环一次 每一次对mapO(1)

     1 class Solution {
     2 public:
     3     int majorityElement(vector<int>& nums) {
     4         unordered_map<int,int>hash;
     5         int res=0;
     6         int len=nums.size();
     7         for(int i=0;i<len;i++)
     8         {
     9             hash[nums[i]]++;
    10             if(hash[nums[i]]>len/2)
    11             {
    12                 res=nums[i];
    13             }
    14         }
    15         return res;
    16     }
    17 };
    View Code

    (3) sort nlogn

    (4)分治

    先分两部分,left和right,如果right==left,那么总体也是ok,结果就是right/left。如果不相等,比较谁count大

     1 def majorityElement(self, nums):
     2     if not nums:
     3         return None
     4     if len(nums) == 1:
     5         return nums[0]
     6     a = self.majorityElement(nums[:len(nums)//2])
     7     b = self.majorityElement(nums[len(nums)//2:])
     8     if a == b:
     9         return a
    10     return [b, a][nums.count(a) > len(nums)//2]
    View Code
  • 相关阅读:
    Windows共享上网的做法
    如何花更少的时间学习更多的知识
    因权限引起的svn提交失败的错误及其解决办法
    ArcGIS二次开发入门(一)
    GeoTiff如何存储颜色表的研究
    html5文件夹上传源码
    vue文件夹上传源码
    前端文件夹上传源码
    asp.net文件夹上传源码
    使用webuploader实现大文件上传分片上传
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/11828256.html
Copyright © 2011-2022 走看看