码迷,mamicode.com
首页 > 其他好文 > 详细

面试之leetcode分治-求众数,x幂等

时间:2019-11-09 23:28:00      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:xxxxxx   public   int   xxxx   color   for   结果   log   reference   

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

 

面试之leetcode分治-求众数,x幂等

标签:xxxxxx   public   int   xxxx   color   for   结果   log   reference   

原文地址:https://www.cnblogs.com/lanjianhappy/p/11828256.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!