首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LeetCode刷题记录(easy难度1-20题)

num和它下标放置一个字典循环这个列表,用目标结果target减正在循环这个数,并判断结果是否字典(即是否循已经遍历过),如果结果存在如字典,即找到相加等于结果两个如果不存在,即把对应下标存入字典...,如果不相等就不是回文,如果每个下标对称位都相等就是回文,简单点可以直接从0循环到n-1,此时时间复杂度是O(N),其实只需要循环到一半即可,因为如果超过一半就会重复了,没有任何意义。...删除所有这个相等元素,返回列表长度,要求不能在使用额外数组,只能操作这一个数组。...题意分析: 一个已排序单链表,删除所有重复元素,每个元素只能保留一个 思路分析 为了删除重复元素,我们需要遍历整个单链表,又由于我们不知道循环次数,只知道结束条件结点空,所以我们需要使用while...二叉树方面,我们一般使用递归方法去遍历,先判断当前结点是否空,如果不为空,可以遍历过程不断比较每个结点上元素如果当前结点也相同,我们需要同时比较当前结点左子树和和右子树。

1.2K40

python学习笔记

如果写成程序,就是: print('''line1 line2 line3''') 布尔:布尔即布尔代数,python只有True与False两种,区分大小写。 空:None, 不同于0 。...---- set set与dict类似,也是一组key集合,但不存储value。由于key不能重复,所以set没有重复key。 创建一个set需要使用list作为输入集合。...--- ### 定义函数 - Python,定义一个函数要使用def语句,依次写出函数名、括号、括号参数冒号:,然后,缩进块编写函数体,函数返回用return语句返回。...对于函数调用者来说,只需要知道如何传递正确参数,以及函数将返回什么样就够了,函数内部复杂逻辑被封装起来,调用者无需了解。 Python函数定义非常简单,灵活度却非常大。...解决栈溢出方法是尾递归优化,事实上尾递归循环效果是一样。 尾递归是指:函数返回时,调用自身本身,并且,return语句不能包含表达式。

2.7K21
您找到你想要的搜索结果了吗?
是的
没有找到

删除链表节点与有效括号——LeetCode 19、20 题记

题目一 第 19 题 删除链表倒数第N个节点: 给定一个链表,删除链表倒数第 n 个节点,并且返回链表头结点。 示例: 给定一个链表: 1->2->3->4->5, n = 2....=None: temp = temp.next l+=1 # 如果删除倒数第n个节点、n链表长度,也就是删除第一个节点,那么直接返回第二个节点即可...(2) 递归模式:大问题是如何分解小问题,也称为递归体。 递归函数只有具备了这两个要素,才能在有限次计算后得出结果。...这里我们可以用一个列表来记录左括号,那么最后加到列表就是需要最先检测匹配。自从解题以来,开始越来越多使用字典,这次也不例外,可以直接通过字典来完成同一类型左右括号绑定,具体细节看代码。...if c in dic.keys(): # 将左括号字典对应添加到列表记录 record.append(dic[c])

85220

数据结构:链表

删除排序链表重复元素 II 给定一个排序链表,删除所有含有重复数字节点,只保留原始链表 没有重复出现 数字。...从各自表头开始算起,链表 A [0,9,1,2,4],链表 B [3,2,4]。 A ,相交节点前有 3 个节点; B ,相交节点前有 1 个节点。...由于这两个链表不相交,所以 intersectVal 必须 0,而 skipA skipB 可以是任意。解释:这两个链表不相交,因此返回 null。...注意:如果两个链表没有交点,返回 null.返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。...如果 pos 是 -1,则在该链表没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。

54520

记录Python学习笔记

如果从数学意义上理解,就会错误地得出ba相同,也应该是'XYZ',实际上b是'ABC'。...set setdict类似,也是一组key集合,但是不存储value,由于key不能重复,所以set没有重复key。...=max print(max(1,2,3)) 定义函数 Python,定义一个函数要使用def语句,依次写出函数名、括号、括号里参数冒号: ,然后,缩进块编写函数体,函数返回用return...如果没有return语句,函数执行完毕后也会返回结果,只是结果None。return None可以简写return。...遗憾是,大多数编程语言没有针对尾递归做优化,Python解释器也没有做优化,所以,即使把上面的fact(n)函数改成尾递归方式,也会导致栈溢出。

68620

Python 高级教程之函数式编程

例如,无论如何,3+7 永远是 10。 它不会更改或修改输入变量。 第二个属性也称为不变性。纯函数唯一结果是它返回。它们是确定性。...函数式编程没有 for 循环或 while 循环概念,而是使用递归。...# 演示递归 Python 程序 # 递归函数查找列表总和 def Sum(L, i, n, count): # Base case if n <= i: return...它们可以存储在数据结构,作为参数传递,或者控制结构中使用如果一种编程语言将函数视为一等对象,则称其支持一等函数。 一等函数性质: 函数是 Object 类型实例。...创建对象实例地方使用使用基本元素是变量函数。函数数据是不可变(创建后无法更改)。使用基本元素是对象方法,这里使用数据是可变数据。它遵循声明式编程模型。它遵循命令式编程模型。

74131

【收藏】Python教程基础篇,超详细超长!

布尔 布尔布尔代数表示完全一致,一个布尔只有True、False两种,要么是True,要么是False,Python,可以直接用True、False表示布尔(请注意大小写),也可以通过布尔运算计算出来...如果没有这一个语句,while循环判断 x < N 时总是True,就会无限循环下去,变成死循环,所以要特别留意while循环退出条件。...语句,依次写出函数名、括号、括号参数冒号:,然后,缩进块编写函数体,函数返回用 return 语句返回。...理论上,所有的递归函数都可以写成循环方式,循环逻辑不如递归清晰。 使用递归函数需要注意防止栈溢出。...判断 True 时候,才把循环的当前元素添加到列表

1.5K30

牛客网剑指offer-1

分析 有很多种办法,可以正向遍历存入列表,然后翻转列表;可以使用栈存储,还可以使用递归列表添加节点 class Solution: def __init__(self):...这个过程是重复,所以我们这里可以使用递归操作,反之,当l2结点小于l1时,就把l1拼接到l2上 class Solution: # 返回ListNode def ReverseList...这个过程是重复,所以我们这里可以使用递归操作,反之,当l2结点小于l1时,就把l1拼接到l2上 class Solution: # 返回ListNode def ReverseList...分析 首先对特殊边界条件进行判断,然后分别递归左右子树,向下递归时需要使用目标值减去根节点,最后将左右子树递归结果拼接一个列表进行遍历,使用一个新列表去接受根节点加上遍历元素 class Solution...(注意,输出结果请不要返回参数节点引用,否则判题程序会直接返回空) 分析 这里给出解法核心就是使用两个字典保存随机节点新老节点对应,需要构建节点直接取出赋值 class RandomListNode

1.2K10

python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04

递归 递归: # 函数调用阶段直接或间接地又调用了自身 应用场景: # 将列表数字依次打印出来(循环层数是你必须要考虑点)   -->  l = [1, [2, [3, [4, [5, [6...# 修改递归深度限制 import sys sys.setrecursionlimit(1100) 应用场景2(有序列表中元素二分法查找) # 抛去 成员运算 in 可以直接返回元素在不在列表,下面探究递归运用...else: print(f"您所要查找数字{find_num} 不在列表l 。") # 请输入您要查找数字>>>:9 # 您所要查找数字9 列表l 。...2 ,如果条件成立,返回 1 ,不成立返回 2 常见应用场景: 在编程时候请尽量避免使用三元表达式嵌套,想要知道结果要去推算,不够直接 is_free = input("请输入是否免费(y...# :右边相当于函数返回 # 匿名函数通常不会单独使用,正常情况下是配合内置函数(也可以是自己写函数)一起使用 内置函数(部分) python3.6 内置函数 ?

93620

Python入门之三元表达式列表推导式生成器表达式递归匿名函数内置函数

Python递归效率低并且没有递归优化 #python递归 python递归效率低,需要在进入下一次递归时保留当前状态,在其他语言中可以有解决方法:尾递归优化,即在函数最后一步(而非最后一行...)调用自己, 但是python又没有递归,且对递归层级做了限制 #总结递归使用: 1....递归效率不高,递归层次过多会导致栈溢出(计算机,函数调用是通过栈(stack)这种数据结构实现,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。...#列表已经从小大到排序,取列表中间索引,获得中间 if num > L[mid]: L = L[mid+1 : ] #num比中间大,只要取中间右边部分...search(num,l,start,stop) else: #如果stop > start则意味着列表实际上已经全部切完,即切空 print('not

1.1K50

七十、反转和合并链表、 链表有环判断

遍历整个数组, 给出数据包含在集合则说明有环, 返回 True; 若遍历完毕, 则说明无环, 返回 False,如果列表也是一样。...如果列表不存在环,最终快指针将会最先到达尾部,此时我们可以返回 false。...这个解决方法使用递归如果L1空就返回L2,L2返回L1,L1val<=L2val,那么继续递归。...#如果L1空就返回L2,L2返回L1 # if not (l1 and l2): # return l1 if l1 else l2 if not l1:...只要每篇博文中写得自己体会,修炼身心;每天不断重复学习,耐住寂寞,练就真功,不畏艰难,奋勇前行,不忘初心,砥砺前行,人生定会有所收获,不留遗憾 (作者:Runsen )」 ❝本文已收录 GitHub

42420

前端学数据结构与算法(四):理解递归及拿力扣链表题目练手

前言 再没对递归了解之前,递归一直是个人噩梦,对于写递归代码无从下手,当理解了递归之后,才惊叹到,编程真的是一门艺术。01世界里,递归是极其重要一种算法思想,不可能绕开。...而计算机擅长的确是重复,那么如何调试递归程序就很重要,这里分享几个经常会使用到小技巧。 1....再解决链表问题时,如果没有思路,可以用纸笔把指针指向过程画下来,然后再尝试从里面找到重复子问题会很有帮助。 206....环形链表↓ 给定一个链表,判断链表是否有环。 为了表示给定链表环,我们使用整数 pos 来表示链表尾连接到链表位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表没有环。...输出:true。 尾部链接到下标1位置,有环。 输入:3->2->0->-4,pos=-1。 输入:false。 尾部没有链接,没环。

54700

Python函数

微信个签是「努力固然重要,请记得选择比努力更重要」因为你做出选择前提是你必须具备一定认知,方向都错了,努力又有什么用呢,不过是南辕北辙,希望给大家带来一些思考。..." l = [1, 2, 3] """ Python ,类型属于对象,变量是没有类型: 以上代码: " Mark " 是 String 类型,[1,2,3] 是 list 类型,而变量...理论上,所有的递归函数都可以写成循环方式,循环逻辑不如递归清晰 凡是循环能干递归都能干 """ def _sum(n): if n == 1: return...1 return n + _sum(n-1) _sum = _sum(4) # 10 print(_sum) """ 递归函数缺点是使用递归函数需要注意防止栈溢出 计算机...print(l) 生成器 generator8.1 """ 通过列表生成式一次性直接创建列表既受到内存限制,也会造成资源浪费 节省空间,不必创建完整list,采用一边循环一边计算机制,

97170

基于Python数据结构之递归与回溯搜索

递归返回结果时,返回两个结果,一个是所有子集,还有一个是该步骤添加子集集合。...,如果某数已找到,则在找下一个时,不包括该数 LeetCode 40 Combination Sum II 该题与上一题相比,区别在于,给定集合列表数字可能重复,目标集合数字只能使用给定集合数字...通过检查第k个皇后能否被放置第j列进行判断(不与其他皇后同行,同列,同斜行)。使用一个长度n列表记录第k行皇后放置列位置。...先将nums按从大到小顺序排序,usednums等长列表,用于记录第i位元素是否被用过。 使用递归判断从第i位元素起始,能否找到这样组合满足其长度之和等于正方形边长。...(1)若满足初始条件,则返回结果(True or False) (2)若不满足条件,则进行递归剩下元素中进行选择,看有没有满足情况如果没有满足情况,used对应位置改为False,结果返回

60710

函数之递归

递归概念: 一个函数内部调用这个函数自身我们就可以将其称为递归函数 递归其实是倆个不同过程: 递:是整个函数执行过程是从上到下顺序 归:是将执行结果返回来是从下到上顺序 def story...''' print(info) story() story() 上面一个简单示例诠释了递归函数概念:story这个函数调用了story函数自身那么我们就可以称story这个函数递归函数...def foo(n): print(n) n += 1 foo(n) foo(1) 测试递归最大深度 通过执行上述代码知道程序没有报错之前执行 最大就是997,当然997...不过我们还是不推荐修改这个默认递归深度,因为如果用997层递归没有解决问题要么是不适合使用递归来解决要么是你代码写太烂了~~~ 看到这里,你可能会觉得递归也并不是多么好东西,不如while True...不告诉你,alex比 egon 大两岁。 你想知道alex多大,你是不是还得去问egon?egon说,也不告诉你,但我比武sir大两岁。

47320

漫谈递归转非递归

其中,具体要保存内容包括:局部变量、形参、调用函数地址、返回。那么,如果递归调用N次,就要分配N*局部变量、N*形参、N*调用函数地址、N*返回。这势必是影响效率。...理解是这样递归:一个函数反复调用自身行为,特指函数本身; 循环:满足一定条件下,重复执行某些行为,如while结构; 迭代:按某种规则执行一个序列每一项,如for结构; 遍历:按某种规则访问图形结构每一个节点...如果能用循环解决递归问题,就尽可能使用循环;如果用循环解决不了,或者能解决代码很冗长且晦涩,则尽可能使用递归。另外,有些低级语言(如汇编)一般不支持递归。...这种方法几乎是通用方法,因为递归本身就是通过堆栈实现,我们只要把递归函数调用局部变量相应状态放入到一个栈结构函数调用返回时做好pushpop操作,就可以了(后面有一个模拟快排例子)...斐波那契数列如果兔子永远不死,一直繁衍下去,则怎么解?很明显,这是个大数问题,有兴趣同学可以尝试去写写代码,下面贴上自己写

1.7K70

Python 变量作用域与函数

函数是组织好,可重复使用,用来实现单一,或相关联功能代码段,函数能提高应用模块性,代码重复利用率,一个较大程序一般应分为若干个程序块,每一个模块用来实现一个特定功能.所有的高级语言中都有子程序这个概念...,返回元组,*args】【定义函数时使用**:收集指定参数,返回列表,**kwargs】 ● 动态参数解包:调用函数时,使用**开头参数,从而传递任意多基于普通或指定参数 什么是形式参数实际参数...嵌套函数:即指在一个函数体,嵌套另外一个函数体,内部函数执行后将结果返回给外部函数使用 递归函数:函数在其内部调用它自己,就叫做递归,递归需设置退出条件,不然会一直递归下去,变成一个死循环 嵌套函数...(1): 使用递归方式实现指定数字阶乘,如下所示. import os def fun(n): if 0==n: # n=0 的话直接返回空,对用户输入零进行判断...匿名函数几个注意事项: ● lambda只是一个表达式,函数体比 def 简单很多 ● lambda表达式会自动return返回,条件返回True,条件返回False ● lambda

2.2K20

LeetCode动画 | 218.天际线问题

线段树 我们可以把输入列表作为一个顶点,按照输入列表长度选取中间,建议使用这个方式:mid := l + (r-l)/2 选择中间,然后进行分治算法。...直到当前输入列表长度1,说明不能再分了,在这个地方作为结束条件,然后返回到另外路径划分其它输入列表。 例如我们划分到 [[2 9 10]] 时候,当前输入列表长度1,不能再进行分治了。...扫描线 如何判断是否是属于“父”集合关键点呢?可以创建两个集合(“子”)目前高度,然后多方角度找到满足关键点条件。...因为高度入堆时候,获取这个堆最大,判断一下最大是否前一关键点的当前高度是否相等,如果不相等,说明这是一个拐点,也是天际线关键点,然后更新当前高度,即当前高度等于最大; 高度出堆时候,将这个高度从堆删除...,接着获取这个堆最大,判断一下这个最大前一关键点的当前高度是否相等,如果不相等,说明这也是一个拐点。

1K10

文心一言 VS 讯飞星火 VS chatgpt (53)-- 算法导论6.2 5题

五、MAX-HEAPIFY代码效率较高,第 10 行递归调用可能例外,它可能使某些编译器产生低效代码。请用循环控制结构取代递归,重写 MAX-HEAPIFY代码。...我们首先计算出当前节点左孩子右孩子索引,然后比较它们与当前节点,找到其中最大元素,并将其索引存储 largest 变量。...该函数接收一个节点作为参数并返回该节点最大。由于 root.right.set_max_value 语句中使用了这个最大,因此该函数必须确保不会更改它。...在这里插入图片描述 chatglm: 很抱歉,无法提供 MAX-HEAPIFY 代码,因为不知道它是什么。但是,可以提供一个通用示例来说明如何用循环控制结构取代递归。...递归方法循环方法都可以解决问题,但是循环方法代码效率更高,因为它使用了循环控制结构来取代递归调用。

18830

第二轮 Python 刷题笔记一:数组

这里值得注意点是时间复杂度,常数系数是不考虑,O(2n) 也是按 O(n) 来计。 空间复杂度 空间复杂度我们先简单理解:若涉及到数组,考虑数组长度;若涉及到递归,则考虑递归最大深度。...首先,非 0 元素时,zero i 一起递增,如果下一位是 0,那么 nums[zero] 此时 0,因为其最后有个 zero += 1;这样当再次遇到非 0 元素时,便可通过将 nums[zero...对于相关解法,看似省事可能是递归其时间复杂度是 O(2^n) 指数级别,所以直接忽略不去考虑。...s 我们也可以分析其复杂度:因为整个过程是对整个数组遍历,其中操作只有移动指针、比较高度计算面积,整体下来时间复杂度 O(n);没有额外列表数组,所以空间复杂度 O(1)。...能想到就是先对数组排序,遍历确定第一个数,再其后面的列表元素遍历确定第二个数,通过 0 减去二者得出第三个数,检测剩余列表是否存在第三个数。

1.1K20
领券