Day40_1202
专注时间:3h23min
每日任务:计算机网络50分钟( 0 分钟),搜广推90分钟~上不封顶+手撕目录里的算法( 60+ ),二刷hot100算法题2道(完成 3 道),刑法实务考试复习50分钟( 20+ 复习到 427页了 )
学习内容: 如上
总结与心得: 课堂上太吵了,而且座位也不舒服,比较难长期专注。不过还是要克服
《56.合并区间》
python
class Solution(object):
def my_qsort(self,intervals,l,r):
if l>=r:
return
x = intervals[l][0]
i,j = l-1,r+1
while i<j:
i+=1
while intervals[i][0]<x:
i+=1
j-=1
while intervals[j][0]>x:
j-=1
if i<j:
intervals[i],intervals[j] = intervals[j],intervals[i]
self.my_qsort(intervals,l,j)
self.my_qsort(intervals,j+1,r)
def merge(self, intervals):
"""
:type intervals: List[List[int]]
:rtype: List[List[int]]
"""
n = len(intervals)
self.my_qsort(intervals,0,n-1)
res = []
left = intervals[0][0]
right = intervals[0][1]
for i in range(1,n):
if intervals[i][0]<=right:
right = max(right,intervals[i][1])
else:
inter = [left,right]
res.append(inter)
left,right = intervals[i][0],intervals[i][1]
res.append([left,right])
return res
《189.轮转数组》
python
class Solution(object):
def my_reverse(self,nums,l,r):
if l>r:
return
while l<r:
nums[l],nums[r] = nums[r],nums[l]
l+=1
r-=1
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: None Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k = k%n
self.my_reverse(nums,0,n-k-1)
self.my_reverse(nums,n-k,n-1)
self.my_reverse(nums,0,n-1)
python
class Solution(object):
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: None Do not return anything, modify nums in-place instead.
"""
# k%n来确定位置,但是用了辅助数组
res = [0] *len(nums)
for i in range(len(nums)):
res[(i+k)%len(nums)] = nums[i]
for i in range(len(nums)):
nums[i] = res[i]
《238.除自身以外数组的乘积》
python
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
#前缀积试试呢?
n = len(nums)
res = [1]*n
pre =[1]*n
last = [1]*n
for i in range(1,n):
pre[i] = pre[i-1]*nums[i-1]
for i in range(n-2,-1,-1):
last[i] = last[i+1]*nums[i+1]
#numpy才可以这样?这里能看出我不熟练numpy要多练习手撕,多写多读代码。而且也能看出非numpy很不方便
#res = pre*last
for i in range(n):
res[i] = pre[i]*last[i]
return res