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
  • 相关阅读:
    移动端web app开发备忘
    HDU 5391-Zball in Tina Town(数论)
    LeetCode:Invert Binary Tree
    Mongo集群之主从复制
    Cocos2d-x--iOS平台lua加密成luac资源方法和Jsc文件&lt;MAC平台开发试用--windows平台暂未研究&gt;
    优秀程序猿因何而优秀?
    Java Exception和Error的差别
    【Android开发】之Fragment与Acitvity通信
    Draw the RGB data from kinect C++ via opengl
    使用Opencv2遇到error C2061: 语法错误: 标识符dest
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/11828256.html
Copyright © 2011-2022 走看看