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

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

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

1.3K40

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])

    87720

    数据结构:链表

    删除排序链表中的重复元素 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解释:链表中有一个环,其尾部连接到第二个节点。

    58420

    记录我的Python学习笔记

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

    77020

    Python 高级教程之函数式编程

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

    78831

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

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

    1.6K30

    牛客网剑指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.3K10

    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 中的内置函数 ?

    97220

    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.2K50

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

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

    46820

    函数之递归

    递归的概念: 在一个函数内部调用这个函数自身我们就可以将其称为递归函数 递归其实是倆个不同的过程: 递:是整个函数执行的过程是从上到下的顺序 归:是将执行的结果返回来是从下到上的顺序 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大两岁。

    52020

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

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

    59200

    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,采用一边循环一边计算的机制,

    99770

    漫谈递归转非递归

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

    1.8K70

    Python 变量作用域与函数

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

    2.4K20

    如何用 Caffe 生成对抗样本?这篇文章告诉你一个更高效的算法

    其中n是要求的噪音,α是相应的系数,L是x+n属于某个类别的loss,c是某个错误类别的标签。...论文中用来得到图像噪声的办法是L-BFGS,这个方法虽然稳定有效,但是很考验算力的,Christian在Google反正机器多又强,用这个方法产生对抗样本自然没有问题,但如果不是土豪的话就不太合适了。...需要注意的是,用caffe.io.load_image读取的图片是一个值为0到1之间的ndarray,经过transformer的处理之后,得到的新的ndarray中每个像素的值会在0到255之间。...另外为了方便直观理解,需要输入每类别的名字,对于ImageNet的数据,可以下载Caffe自带的synset_words.txt,然后把里面的类别按顺序读取到一个列表里即可,下面例子中我们假设这个列表就是...利用迭代更好地生成对抗样本 分类模型虽然没有距离这个概念,但类别间在输入空间上显然还是相似的类别会更近一些,通过上部分的例子也可以看到,狗变成熊或者黄鼠狼相对容易一些,变成鸵鸟就难一点了,变成其他更不相似的比如球拍

    90730

    LeetCode动画 | 218.天际线问题

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

    1.1K10

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

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

    22230

    第二轮 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
    领券