代码写的乱,更容易被卡
class Solution:
def calculate(self, s: str) -> int:
#*和/拿出来算了再压进去
#+和-压进去栈
op_stack=[]
#还是使用正则表达式简单点
#正则表达式有点难
t=''
for i in s:
if i==' ':
continue
t+=i
s=t
def com():
t=0
op_stack1=op_stack[::-1]
while op_stack1:
t=op_stack1.pop()
try:
b=op_stack1.pop()
c=op_stack1.pop()
op_stack1.append(t+c if b=='+' else t-c)
except:
pass
return t
i,n=0,len(s)
#print(s)
while i
-
思路:模拟栈,先把乘除计算完(合成数字),再算加减(需要做个逆序)
因为使用sum(op_stack),所以要加入-num_per,故导致负数整除某整数的情况。并且按照题意是int(负数/整数)的形式。
-
关于python中的堆,其只有小顶堆,大顶堆借助小顶堆实现
关于堆的打卡,直接一遍过,说明代码严谨性是可以的
- 亮点,heapq小顶堆改造成大顶堆
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
提示:
0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/smallest-k-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution:
def smallestK(self, arr: List[int], k: int) -> List[int]:
#最小的k个数
#最小堆,应该使用最大堆来存
if k==0 or not arr:
return []
heap_ch_min_max=[-i for i in arr[:k]]
#print(heap_ch_min_max,arr[:k])
#print(arr,k)
heapq.heapify(heap_ch_min_max)
for i in arr[k:]:
try:
t=heapq.heappop(heap_ch_min_max)
except:
#print(heap_ch_min_max)
print('hi')
if -i>t:
heapq.heappush(heap_ch_min_max,-i)
else:
heapq.heappush(heap_ch_min_max,t)
return [-i for i in heap_ch_min_max]