目录
- Task1 分治
- 50. Pow(x, n)
- 53. 最大子序和
- 169. 多数元素
- Task2 动态规划
- Task3 查找1
- Task4 查找2
Task1 分治
50. Pow(x, n)
class Solution(object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
if n < 0 :
x = 1/x
n = -n
if n == 0 :
return 1
if n%2 ==1:
p = x * self.myPow(x,n-1)
return p
return self.myPow(x*x,n/2)
53. 最大子序和
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
if n == 1:
return nums[0]
left = self.maxSubArray(nums[:len(nums)//2])
right = self.maxSubArray(nums[len(nums)//2:])
max_l = nums[len(nums)//2 -1]
tmp = 0
for i in range( len(nums)//2-1 , -1 , -1 ):
tmp += nums[i]
max_l = max(tmp ,max_l)
max_r = nums[len(nums)//2]
tmp = 0
for i in range(len(nums)//2,len(nums)):
tmp += nums[i]
max_r = max(tmp,max_r)
return max(left,right,max_l+ max_r)
169. 多数元素
class Solution(object):
def majorityElement2(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return None
if len(nums) == 1:
return nums[0]
left = self.majorityElement(nums[:len(nums)//2])
right = self.majorityElement(nums[len(nums)//2:])
if left == right:
return left
if nums.count(left) > nums.count(right):
return left
else:
return right
Task2 动态规划
Task3 查找1
Task4 查找2