这篇博客讲具体题目
50. Pow(x, n)
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例:
输入: 2.00000, 10
输出: 1024.00000
===========================
输入: 2.10000, 3
输出: 9.26100
===========================
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
−
100.0
<
x
<
100.0
{-100.0 < x < 100.0}
−100.0<x<100.0
n 是 32 位有符号整数,其数值范围是
[
−
2
31
,
2
31
−
1
]
{[−2^{31}, 2^{31} − 1] }
[−231,231−1]。
class Solution:
def myPow(self, x: float, n: int) -> float:
"""
递归
n分为奇偶数两种情况
"""
if not n:
return 1
if n < 0 :
return 1/self.myPow(x, -n)
if n % 2:
# n为奇数的情况
return self.myPow(x, n-1) * x
return self.myPow(x * x, n / 2)
执行用时 : 52 ms, 在Pow(x, n)的Python3提交中击败了80.77% 的用户
内存消耗 : 13.3 MB, 在Pow(x, n)的Python3提交中击败了26.84% 的用户
非递归的形式:
class Solution:
def myPow(self, x: float, n: int) -> float:
# 非递归(这里用到了位运算,优点是速度快)
if n < 0:
x = 1 / x
n = -n
pow = 1
while n:
# n的二进制数与1的二进制数的逻辑与
if n & 1:
pow *= x
x *= x
n >>= 1
# 把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数
return pow
执行用时 : 56 ms, 在Pow(x, n)的Python3提交中击败了70.98% 的用户
内存消耗 : 13.2 MB, 在Pow(x, n)的Python3提交中击败了61.54% 的用户
python 位运算
169. 求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例:
输入: [3,2,3]
输出: 3
===========================
输入: [2,2,1,1,1,2,2]
输出: 2
def majorityElement(nums) -> int:
# 法1:字典
# 我这个的时间复杂度较高,因为下面又多了一个循环
hashmap = {}
for index in range(len(nums)):
if nums[index] not in hashmap:
hashmap[nums[index]] = 1
else:
hashmap[nums[index]] += 1
for item in hashmap.items():
if item[1] > len(nums) / 2:
return item[0]
# 法2:sorted,这个解法有些投机取巧。时间复杂度为O(NlogN)
# nums = sorted(nums)
# return nums[len(nums)//2]
print(majorityElement([2, 2, 1, 1, 1, 2, 2]))
print(majorityElement([3, 2, 3]))