面试之leetcode分治-求众数,x幂等
Posted L的存在
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试之leetcode分治-求众数,x幂等相关的知识,希望对你有一定的参考价值。
1 leetcode50 计算 x 的 n 次幂函数。
实现 pow(x, n) ,即计算 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)
非递归
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
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 };
(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]
以上是关于面试之leetcode分治-求众数,x幂等的主要内容,如果未能解决你的问题,请参考以下文章