排序链表 148
数组 topK 215
判断两个链表是否相交。
求一个数列中两个元素的最大和,找到这个两个元素。(Top K 问题)
简单计算器 描述 用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )5/2- 3 2* 2/4+9)((( 3 + 4)-4)-4) 这样的表达式,假设表达式里面除了包含空格、’+’、’-‘、’ ‘、’/‘和括号再无其他特殊符号,然后自己动手写代码解析其中的表达式,实现加减乘除,最后得出的结果与真实的计算机所算的结果必须一致。
代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 """ @Time : 2021/10/13 14:22 @Author: Feng Lepeng @File : test.py @Desc : """ import redef multiply_divide (s) : ret = float(s.split('*' )[0 ]) * float(s.split('*' )[1 ]) if '*' in s else float(s.split('/' )[0 ]) / float( s.split('/' )[1 ]) return retdef remove_md (s) : if '*' not in s and '/' not in s: return s else : k = re.search(r'-?[\d\.]+[*/]-?[\d\.]+' , s).group() s = s.replace(k, '+' + str(multiply_divide(k))) if len(re.findall(r'-' , k)) == 2 else s.replace(k, str( multiply_divide(k))) return remove_md(s)def add_sub (s) : l = re.findall('([\d\.]+|-|\+)' , s) if l[0 ] == '-' : l[0 ] = l[0 ] + l[1 ] del l[1 ] sum = float(l[0 ]) print(l) for i in range(1 , len(l), 2 ): if l[i] == '+' and l[i + 1 ] != '-' : sum += float(l[i + 1 ]) elif l[i] == '+' and l[i + 1 ] == '-' : sum -= float(l[i + 2 ]) elif l[i] == '-' and l[i + 1 ] == '-' : sum += float(l[i + 2 ]) elif l[i] == '-' and l[i + 1 ] != '-' : sum -= float(l[i + 1 ]) return sumdef basic_operation (s) : s = s.replace(' ' , '' ) return add_sub(remove_md(s)) def calculate (expression) : if not re.search(r'\([^()]+\)' , expression): return basic_operation(expression) k = re.search(r'\([^()]+\)' , expression).group() expression = expression.replace(k, str(basic_operation(k[1 :len(k) - 1 ]))) return calculate(expression)if __name__ == '__main__' : s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )' print(calculate(s))
判断一个点是否在给定五角星内部 思路 判断一个散点是否在多边形内部的主要依据有如下几点:
1、过散点做X轴平行线,与多边形相交。
2、左边交点数为基数,在内部,偶数在外面
3、散点在多边形上的情况 算成内部
手撕NMS 二分查找 用Python实现一个二分查找的函数。
二分查找算法:简单的说,就是将一个列表先排序好,比如按照从小到大的顺序排列好,当给定一个数据,比如3,查找3在列表中的位置时,可以先找到列表中间的数li[middle]和3进行比较,当它比3小时,那么3一定是在列表的右边,反之,则3在列表的左边,比如它比3小,则下次就可以只比较[middle+1, end]的数,继续使用二分法,将它一分为二,直到找到3这个数返回或者列表全部遍历完成(3不在列表中)
优点:效率高,时间复杂度为O(logN); 缺点:数据要是有序的,顺序存储。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 li = [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] def search (someone, li) : l = -1 h = len(li) while l + 1 != h: m = int((l + h) / 2 ) if li[m] < someone: l = m else : h = m p = h if p >= len(li) or li[p] != someone: print("元素不存在" ) else : str = "元素索引为%d" % p print(str) search(3 , li)