#動態規劃方法
class
day3_solution_1
:def
__init__
(self,nums)
: self.nums = nums
defmaxsubarray
(self)
:#考慮情況1:如果陣列中全是負數,則最大的和為其中的最大的數字:
ifmax
(self.nums)
<0:
return
max(self.nums)
#情況2:陣列中有正有負:
currsum = restsum = self.nums[0]
for n in self.nums[1:
]:currsum =
max(n,currsum + n)
restsum =
max(currsum,restsum)
return restsum#時間複雜度為o(n);空間複雜度為o(1)
class
day3_solution_2
:def
__init__
(self,nums)
: self.nums = nums
defhelps
(self,nums,left,right)
:if right <= left:
return nums[left]
mid =
(right + left)//2
lmax = self.helps(nums,right,mid -1)
rmax = self.helps(nums,mid +
1,left)
mmax = nums[mid]
suml = restl =
0for i in
range
(mid -
1,left -1,
-1):
suml += nums[i]
restl =
max(suml,restl)
sumr = restr =
0for i in
range
(mid +
1,right +1)
: sumr += nums[i]
restr =
max(sumr,restr)
return
max(restr + restl + nums[mid]
,max
(lmax,rmax)
)def
maxsubarray
(self):if
len(self.nums)==0
:return
right =
len(self.nums)-1
left =
0return self.helps(self.nums,left,right)
4月30天leetcode訓練 Day15
給定乙個由n個整數組成的陣列,其中n 1,則返回乙個陣列輸出,使得output i 等於除nums i 之外的所有nums元素的乘積。example input 1,2,3,4 output 24,12,8,6 不考慮時間複雜度的話,通過遞迴暴力破解,設定遞迴輔助函式,傳入陣列和開始,結束位置。開始...
4月30天leetcode訓練 Day16
給了乙個2維陣列,裡面是由1和0組成。規則是這樣的,1代表陸地,0代表海水,讓我們尋找小島,那小島肯定有乙個特點,被水隔離,連續的陸地組成一塊小島,而本題中連續的定義為上下左右相鄰 不包括對角線 基於這樣的規則讓我們找尋有幾個島。example 1 input 11110 11010 11000 0...
4月30天leetcode訓練 Day27
given a 2d binary matrix filled with 0 s and 1 s,find the largest square containing only 1 s and return its area.從乙個二維矩陣中找出最大的正方形面積 正方形裡面都是1才合法 input ...