算法
文章平均质量分 57
趣享Eureka
一枚程序猿,想要成为优秀的Python后端开发工程师!
展开
-
n次方和n叉树的联系
n次方的颠倒以n叉树说明 23和32分析:无论前者还是后者,都以指数级别增加, 对前者而言, 第二行代表1盏灯有两种状态,而第一行为啥0盏灯却有一种状态不好理解, 这边涉及到递归进层的终止条件灯泡的亮暗一共3盏灯,每盏灯都有亮暗两种状态,那么3盏灯一共多少种的状态答:23,第一盏灯有两种情况,第n盏灯有两种情况公司的竞标4家公司申购11件商品,一共有多少种的商品申购方式<换种问法2: 所有公司的报价方式, 问题答案是否一致?>答:问法1: 第一件商品4种申购方式,第n原创 2021-05-04 17:43:19 · 285 阅读 · 0 评论 -
进程,线程和协程
Preliminary进程(process)和线程(thread)是非常抽象的概念, 也是程序员必需掌握的核心知识。多进程和多线程编程对于代码的并发执行,提升代码效率和缩短运行时间至关重要。子程序和协程的区别及联系子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。 所以子程序调用是通过栈实现的一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同,协程看上去也转载 2020-06-24 10:50:59 · 167 阅读 · 0 评论 -
代码思考_levenshtein 算法
def levenshtein(self,first,second): if len(first) > len(second): # 保证长度小的在后 first,second = second,first if len(first) == 0: return len(second) if len(second) == 0:转载 2021-04-08 21:29:58 · 183 阅读 · 0 评论 -
代码思考_textwrapper 原理
def _wrap_chunks(self, chunks): """_wrap_chunks(chunks : [string]) -> [string] Wrap a sequence of text chunks and return a list of lines of length 'self.width' or less. (If 'break_long_words' is false, some lines may be longer than th.原创 2021-03-28 16:47:28 · 268 阅读 · 0 评论 -
代码思考_希尔排序
走心的目录代码实现代码分析Q&A代码实现# 希尔排序def shell_sort(L): n = len(L) if n <= 1: return gap = n // 2 # 初始步长 while gap > 0: # 最后一次步长为1(即普通的插入排序),然后整个希尔排序结束 for i in range(gap, n): temp = L[i] j =原创 2021-03-26 10:12:17 · 109 阅读 · 0 评论 -
如何输出连续页,单页自成一页
解题过程原创 2021-03-05 17:35:41 · 127 阅读 · 0 评论 -
代码思考_归并排序
代码实现步骤截图图一图二重要代码片段def merge(left, right): '''归并操作,使用deque''' merged, left, right = [], deque(left), deque(right) while left and right: merged.append(left.popleft() if left[0] <= right[0] else right.popleft()) # deque popleft原创 2021-02-22 11:57:55 · 101 阅读 · 0 评论 -
Python标准库之 functools
巨人的肩膀Python标准库之 functools/itertools/operator凉菜functools, itertools, operator是Python标准库为我们提供的支持函数式编程的三大模块,合理的使用这三个模块,我们可以写出更加简洁可读的Pythonic代码,接下来我们通过一些example来了解三大模块的使用。functools的使用functools是Python中很重要的模块,它提供了一些非常有用的高阶函数。高阶函数就是说一个可以接受函数作为参数或者以函数作为返回值的函数转载 2021-01-30 10:47:00 · 541 阅读 · 0 评论 -
待优化_求出2的下标组成的子列表
输入:sequence = [1, 1, 2, 3, 2, 2, 2, 3, 3, 4, 2, 2, 2, 2]输出:[[4, 5, 6],[10, 11, 12, 13]]原创 2020-11-14 17:06:01 · 179 阅读 · 0 评论 -
找出不能用列表中元素相加得到的最小整数
题目写一个函数,找出不在列表中,且不能用列表中元素相加得到的最小整数, 如:列表[1,2,5,7],不在列表中且不能够用列表元素相加得到的数是4import itertoolsdef func(mylist): result = itertools.combinations(mylist, 2) # 通过combinations()列出原列表所有组合情况 cp_mylist = mylist.copy() # 对原列表备份 for i in result:原创 2020-11-01 19:34:39 · 254 阅读 · 0 评论 -
数独盘面验证
解法1# 判断盘面是否符合数独要求board = [[1, 3, 2, 5, 7, 9, 4, 6, 8], [4, 9, 8, 2, 6, 1, 3, 7, 5], [7, 5, 6, 3, 8, 4, 2, 1, 9], [6, 4, 3, 1, 5, 8, 7, 9, 2], [5, 2, 1, 7, 9, 3, 8, 4, 6], [9, 8, 7, 4, 2, 6, 5, 3, 1], [2, 1, 4, 9, 3, 5, 6, 8, 7], [3, 6,原创 2020-10-27 21:28:10 · 323 阅读 · 0 评论 -
求下一个大数
# 下一个大数def next_bigger(number): """ 逆序的原因是: 求下一个数通常都是从末尾开始比较的 :param number: :return: """ reverse_number = str(number)[::-1] # n 为从后往前的列表 print(reverse_number) try: # 计算从第1位到第n-1 位数字中, 哪一个前者比后者大,将最小下标付给i原创 2020-10-25 20:11:23 · 216 阅读 · 0 评论 -
冒泡排序------二级排序
a = [{'x0': 15, 'y0': 30}, {'x0': 1, 'y0': 35}, {'x0': 15, 'y0': 40}, {'x0': 15, 'y0': 20}, {'x0': 1, 'y0': 20}, {'x0': 5, 'y0': 10}]# a = [{'x0': 15, 'y0': 30}, {'x0': 1, 'y0': 35}, {'x0': 15, 'y0': 40}]def sort_by_x0y0(mylist, param): prin原创 2020-10-02 16:02:16 · 169 阅读 · 0 评论 -
排列组合--数字篇
“2 012”含有数字0,1,2,且有两个数字2,则含有数字0,1,2,且有两个相同数字的四位数的个数为( 24)就所含的两个相同数字是否为0进行分类计数:第- -类,所含的两个相同数字是0,则满足题意的四位数的个数为CA2= =6;第二类,所含的两个相同数字不是0,则满足题意的四位数的个数为C’:C}:C}= 18. 由分类加法计数原理得,满足题意的四位数的个数为6十18=24, 故选B....原创 2020-09-25 20:23:51 · 1462 阅读 · 0 评论 -
Python_OrderedDict原理
SCclass OrderedDict(dict): 'Dictionary that remembers insertion order' # An inherited dict maps keys to values. # The inherited dict provides __getitem__, __len__, __contains__, and get. # The remaining methods are order-aware.<其余方法都基于原创 2020-08-09 22:27:36 · 594 阅读 · 0 评论 -
求列表中两个子序列之差最小的序列
SCdef mean(sorted_list): """ 题目:将一个序列分成两个子序列,确保两者之间的差值最小 实现: 1. 对列表排序 2. 递归列表:取出-1位置元素作为big,-2 位置元素作为small, 从前到后,切到-2位置(不包括) 3. 递归结束条件:传入的参数为空,开始递归退层 4. 一个大列表b_list,和一个小列表a_list,分别用来存放小元素和大元素原创 2020-08-09 11:59:41 · 632 阅读 · 0 评论 -
深度优先和广度优先的通俗解释
深度优先可以这样想,一个人迷路,遇到很多分叉路口,他只有一个人,并且想走出去,所以只能一个个尝试,一条道路走到黑,发现到头了,然后再拐回去走刚才这条路的其他分叉路口,最后发现这条路的所有分叉路口走完了,选择另外一条路继续以上操作,直到所有的路都走过了。广度优先并不是这样,一个人迷路,但是他有技能(分身术)它遇到分叉路口,不是选一个走,而是分身多个人都试试,比如有A、B、C三个分叉路口,它A路走一步,紧接着B路也走一步,然后C路也赶紧走一步,步伐整齐统一,直到所有的路走过了。...转载 2020-07-18 11:23:35 · 1467 阅读 · 0 评论 -
python_N猴子偷桃
#!/usr/bin/python# coding=utf-8# __author__ = 'cy'# 输入猴子数量# monkey = str(input("Input monkey num:"))monkey = 5# 定义桃子总数函数def show(n): # 从1开始,方便变量赋值 for i in range(1, monkey + 1): t = (n - 1) / monkey # 当前猴子应该带走的桃子数 # 格式化输出转载 2020-07-17 17:20:03 · 940 阅读 · 0 评论 -
python_筛选出素数
思路分析Source Coden = 100 # <=100的素数import numpy as npa = np.arange(1, 101)n_max = int(np.sqrt(len(a))) is_prime = np.ones(len(a), dtype=bool) # is_prime 列表默认为Trueis_prime[0] = Falsefor i in range(2, n_max): if i in a[is_prime]:原创 2020-06-26 18:07:20 · 1150 阅读 · 0 评论 -
Manacher 算法_NOTACK
重要图片源代码int Manacher(){ int len = Init(); // 取得新字符串长度并完成向 s_new 的转换 int max_len = -1; // 最长回文长度 int id; int mx = 0;for (int i = 1; i < len; i++){ // 如果i在列表右边界内,那么就比较对称点j 或者是mx-i 的大小 if (i < mx) p[i] = min(p[2 * id - i], mx - i); // 需搞原创 2020-06-19 17:07:23 · 173 阅读 · 0 评论 -
PV操作系列--读者写者问题
问题描述有一个许多进程共享的数据区,这个数据区可以是一个文件或者主存的一块空间;有一些只读取这个数据区的进程(Reader)和一些只往数据区写数据的进程(Writer),此外还需要满足以下条件:(1) 任意多个读进程可以同时读这个文件;(2) 一次只有一个写进程可以往文件中写;(3) 如果一个写进程正在进行操作,禁止任何读进程度文件。读优先一个读者试图进行读操作时,如果这时正有其他读者在进行操作,他可直接开始读操作,而不需要等待。readcount //读者计数器var rwmutex,原创 2020-06-14 20:57:43 · 6016 阅读 · 0 评论 -
PV操作系列_生产者_消费者
buffer: array [0..k-1]of integer;//共享缓冲区的大小in,out: 0..k-1;//in记录第一个空缓冲区,out记录第一个不空的缓冲区 empty,full,mutex: semaphore;//empty:无数据的缓冲块,控制缓冲区不满// full:有数据的缓冲块控制缓冲区不空// mutex保护临界区//初始化empty=k,full=0,mutex=1 cobegin procedure producer: proce原创 2020-06-11 16:21:35 · 1905 阅读 · 0 评论 -
leetcode_合并链表
方法 1:递归想法我们可以在两个链表里进行递归 merge 操作(忽略边界情况,比如空链表等),that’s 两个链表伪代码if list1[0]<list2[0]{ list1[0] +merge(list1[1:],list2) }else{ list2[0]+merge(list1,list2[1:]) }算法我们直接将以上递归过程建模,首先考虑边界情况。 特殊的,如果 l1 或者 l2 一开始就是 null ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否原创 2020-06-10 12:00:47 · 409 阅读 · 0 评论 -
leetcode_组合总和2_2种解法
题目Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.Each number in candidates may only be used once in the combination.Note:All nu转载 2020-06-09 20:39:49 · 281 阅读 · 0 评论 -
异步和同步,阻塞和非阻塞区别
异步&非阻塞异步or 同步 关注的是 发出调用后,当前这个调用是否直接返回,不管是否有返回结果<调用的结果>阻塞还是非阻塞关注的是:程序等待调用的结果<返回值>的状态,在无法得到返回值的情况下,调用是否会阻塞当前线程<调用的过程>图解...原创 2020-05-13 20:54:12 · 444 阅读 · 0 评论 -
killer sudoku_无解
PuzzleWrongHOW COME?假设C3为2,C1,C2 分别为1,3,那么D1,D2 为2,4,导致D3,D4为1,3 数对原创 2020-06-02 20:52:36 · 690 阅读 · 1 评论 -
分组&折半查找--有趣称重题
题目有8个球,其中1个比另外的要略重。在不用砝码的前提下,你最少要称几次思路1算法中,折半查找最适合用在整体是有序情况下,而本题中已知一个小球比其它的略重,其他小球重量一致。故折半查找就是将小球分成两组,每组四个,比较轻重后,选择其中一组继续比较,over and over again,最少需要比较三次思路2最少称两次:把所有的球分成三组,其中有两组,每组3个球,另一组每组2个球;将3个球的两组进行称重,如果其中一组比较重,从这组球当中任选两个,/再次称重/,如果轻重不等,重的球就是你要找的。如原创 2020-05-31 09:34:32 · 459 阅读 · 0 评论 -
从我们常用的电脑操作到事件驱动模型
拿我们经常使用的电脑打比方Windows 的工作机制简单地说就是三个关键的概念:窗口、事件和消息<User 通过在窗口进行各种操作从而触发事件,该事件就会向操作系统发送相应的操作消息>。不妨简单地将窗口看做带有边界的矩形区域。也许已经了解几种不同类型的窗口:如,“资源管理器”窗口、文字处理程序中的文档窗口etc.除了这些最普通的窗口外,实际上还有许多其它类型的窗口。命令按钮是一个窗口,图标、文本框、选项按钮和菜单条也都是窗口。Microsoft Windows 操作系统通过给每一个窗口指原创 2020-05-29 19:58:42 · 337 阅读 · 0 评论 -
折半插入算法
代码实现效果举个例子:数组为1 5 9 20 7 6当遍历到7时,用temp 存储该数值7然后从下标0开始,到i-1 下标结束,为7 找个新家<用折半的方式快速为7找新家>最后发现low=high=1,也就是说下标2为值7的新家那么接下来只要将原本7之前的位置往后移动<也就是9,20>, 然后把7放在9的位置即可...原创 2020-05-15 14:27:57 · 303 阅读 · 0 评论 -
二进制的趣味问题哦
题目现有1000个苹果,分别装到10个箱子里,要求可随意拿到任意数目的苹果但不拆箱,那么每个箱子放的苹果数分别是多少?分析任何数目<每个箱子应该放多少的苹果 让我可以拿到1000中的任意数字的苹果数,例如666就是489+128+32+16+1>利用了二进制,01代表1,10代表2,100代表4,1000代表8。。。1到1000里任意一个数换成二进制表示后,都可以用以上十个组合而成答案1,2,4,8,16,32,64,128,256,489<489通过1000-255-原创 2020-05-09 10:02:59 · 1227 阅读 · 0 评论 -
python_split 的原理
i = j = 0;while (maxcount-- > 0) { /* Increment counter past all leading whitespace in the string. */ while (i < str_len && STRINGLIB_ISSPACE(str[i])) i++; /...原创 2020-05-05 08:34:34 · 634 阅读 · 0 评论 -
Kafka原理笔记
专业术语主题:每一条消息均有一个主题,就像每条邮件的主题一样分区:每一条消息有序的存在在此(类似于磁盘分区)副本:Broker:集群的每一个节点zookeeper:维护kafka集群,存储Broker的元信息 NOT ACK图解联系分区和主题:不同的分区可能有相同的主题借鉴于Kafka小总结...原创 2020-05-02 10:55:44 · 182 阅读 · 0 评论 -
分而治之策略
Preview分治算法(分而治之)设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破分治策略:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归<具体解决问题的方法>地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策...原创 2020-04-30 11:39:34 · 730 阅读 · 0 评论 -
帮助你理解贪心算法的小例子----选用最大面值支付
预备知识贪心算法是指:在每一步求解的步骤中,它要求“贪婪”的 选择最佳操作,并希望通过一系列的最优选择,能够产生一个问题的(全局的)最优解。贪心算法每一步必须满足一下条件: 1、可行的:即它必须满足问题的约束 2、局部最优:他是当前步骤中 所有可行选择中最佳的局部选择 3、不可取消:即选择一旦做出,在算法的后面步骤就不可改变了<一旦在当前选择某个方案,接下来就不可撤...原创 2020-04-29 17:37:48 · 367 阅读 · 0 评论 -
python_N后过程详解
倒序法solutions中的每一个元素都是一种解法例如 (0, 4, 7, 5, 2, 6, 1, 3), 下标代表每一行,每一个元素代表当前皇后处于第几列N皇后成立的标志是啥宫格多大?依据是啥...原创 2020-04-27 21:47:17 · 305 阅读 · 0 评论 -
note_leetcode_三数相加
来源:https://zhuanlan.zhihu.com/p/114938369知乎博主(狄老师)是一名优秀的软件架构师,强烈推荐大家三连,我只是萌新小白,写上自己的想法思路而已题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组源码:class Solution...原创 2020-03-22 12:04:34 · 289 阅读 · 0 评论 -
两整数相加
class Solution(object): def getSum(self, a, b): """ :type a: int :type b: int :rtype: int 1.python中一直左移是不会溢出的,所以要手动模拟32位int型 2.如果小于MAX_INT就不用处理了 ...原创 2019-11-18 19:33:22 · 186 阅读 · 0 评论 -
z字形转换_leetcode
来源:https://leetcode-cn.com/problems/zigzag-conversion/观察(numRows=3):Most importantly, 寻找idx, numRows, row的关系,这下你应该知道自己下次该如何解决这样的问题row = idx % (2 * numRows - 2), 你会发现除数正好是z字形的一个小周期,如上图所示row >...原创 2019-10-17 14:18:13 · 141 阅读 · 0 评论 -
从K个数组中任取一个字符串进行按顺序拼接
完整题目给定K个字符串数组,从这K个数组中任取一个字符串,按顺序拼接,列出所有可能的字符串组合样例:input:[[‘a’,‘b’,‘cd’],[‘de’],[‘e’,‘f’]]output:[‘adee’, ‘adef’, ‘bdee’, ‘bdef’, ‘cddee’, ‘cddef’]import itertoolsmy_list=[['a','b','cd'],['de'],...原创 2019-05-18 10:52:49 · 2520 阅读 · 2 评论 -
K个有序链表变成一个有序链表
class LinkList: def __init__(self,value): self.value=value self.next=Nonea=LinkList(1)b=LinkList(5)c=LinkList(3)res=sorted((a,b,c),key=lambda item:item.value) # 免费赠送将K个链表排序# ...原创 2019-05-17 17:57:25 · 407 阅读 · 0 评论