1 53. 最大子序和
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
if len(nums) == 1:
return nums[0]
curr = nums[0]
max_sum = nums[0]
for i in range (1,len(nums)):
if curr<0:
curr = nums[i]
else:
curr += nums[i]
max_sum = max(max_sum,curr)
return max_sum
动态规划
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
dp = [0]*len(nums)
dp[0] = nums[0]
result = nums[0]
for i in range(1,len(nums)):
dp[i] = max(dp[i-1]+nums[i],nums[i])
result = max(result,dp[i])
return result
2 3. 无重复字符的最长子串
滑动窗口
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
n = len(s)
left,right = 0,0
window = []
max_len = 0
if n<=1:
return n
while right<n:
if s[right] not in window:
max_len = max(max_len,right-left+1)
window.append(s[right])
right += 1
else:
window.remove(s[left])
left += 1
return max_len
3 1、两数之和
暴力法:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
result = []
for i in range(0,len(nums)):
for j in range(i+1,len(nums)):
sum = nums[i]+nums[j]
if sum == target:
result.append(i)
result.append(j)
return result
哈希表
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
result = []
map = {}
for i in range(0,len(nums)):
map[nums[i]] = i
for j in range(0,len(nums)):
num = target-nums[j]
if num in map and map[num]!=j:
result.append(j)
result.append(map[num])
return result
4 215. 数组中的第K个最大元素
最小堆
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
minheap = []
heapify(minheap)
for num in nums:
heappush(minheap,num)
if len(minheap)>k:
heappop(minheap)
return minheap[0]
先排序后找
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
nums.sort()
n = len(nums)
return nums[n-k]
纯属记录:部分代码参考B站博主