2021-09-02leetcode

代码写的乱,更容易被卡

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]


你可能感兴趣的:(2021-09-02leetcode)