- 博客(26)
- 收藏
- 关注
原创 leetcode:环形链表2
如果我们从head开始计算步数,走到环形入口处需要走a + nb 步,此时slow已经走了nb步了,那么它再走a步就一定停在了环形入口处,但是这个a怎么算呢?我们只需要在此时将fast置于head处,与slow同速走,两者相遇时,就找到了我们要找的节点。1、两者没有相遇,fast或者fast.next不存在,说明无环。两式计算可得:fast = 2nb slow = nb。(此处设直线区域的节点数为a,环形区域的节点数为b),返回链表开始入环的第一个节点。也就是说slow走了nb步。
2023-10-26 17:30:32 80
原创 leetcode:多数元素
你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。多数元素是指在数组中出现次数。哈希表:collections.Counter()
2023-10-26 16:21:04 72
原创 leetcode:相交链表
方法一:利用哈希表,遍历一次headA,将其节点存储到哈希表中,再遍历一次headB,比较B中的节点是否已经在哈希表中。,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回。方法二:栈,从后往前遍历两个链表,第一个不相等的节点就是我们要的结果。给你两个单链表的头节点。
2023-10-23 17:50:27 73
原创 leetcode:环形链表
定义两个指针,慢指针指向head,快指针指向head.next。慢指针一次走一步,快指针一次走两步。此处之所以不像龟兔赛跑算法那样将快慢指针都设置在head,是因为都设在head,下面的while就不会执行。当快慢指针再次相遇时,就能说明该链表中一定有环。方法一:哈希表:利用一个哈希表来存储已经访问过的所有节点,每次我们到达一个节点时,判断该节点是否已经存在于哈希表中,如果在说明有环,如果不在,说明没有环,直到遍历完所有节点。指针再次到达,则链表中存在环。,判断链表中是否有环。给你一个链表的头节点。
2023-10-23 11:15:38 37
原创 leetcode:验证回文串
方法一:双指针:指针left、right分别指向字符串s的左右两侧,如果left = right 那么left+1, right-1,直到两者相遇,返回True。若不相等,则返回False。在原字符串上直接判断:同样使用双指针,但是是直接在原字符串上进行判断,每次将指针移动到下一个字母字符或数字字符,再判断这两个字符是否相等。如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个。字母和数字都属于字母数字字符。
2023-10-23 10:44:58 45
原创 leetcode:买卖股票
遍历一次prices,找到那个历史最低点,然后每一天都考虑今天卖出股票的话,我能挣多少利润,当考虑完所有天数后,就得到了最佳结果。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。买入这只股票,并选择在。
2023-10-23 10:24:12 43
原创 leetcode:杨辉三角
第n行的第i个数,由第n-1行的第i-1个数和第i个数求和得到的。在「杨辉三角」中,每个数是它左上方和右上方的数的和。生成「杨辉三角」的前 numRows。给定一个非负整数 numRows。
2023-10-19 11:05:05 95
原创 leetcode:将有序数组转化为二叉搜索树
给定一个有序数组,将其转化为树,也就是说这个有序数组是二叉树的中序遍历,但是仅凭中序遍历我们无法确定二叉树,加上高度平衡,答案不唯一,但是范围很小。如果遍历序列为偶数,就会有三种选择,mid的左边和右边以及任意选择一个节点,之后同样递归选择。如果中序遍历为奇数,那么我们只能选择最中间的数字作为根节点,再之后递归地进行选择根节点。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。需注意,当left>right时,该二叉树为空。排列,请你将其转换为一棵。
2023-10-18 16:00:12 161
原创 leetcode:求二叉树的最大深度
递归:若已知一棵树的左子树和右子树的深度,那么这棵树的深度为max(left, right)+ 1。那么我们也可以用深度优先遍历递归地计算左子树和右子树的深度。是指从根节点到最远叶子节点的最长路径上的节点数。
2023-10-18 15:32:04 47
原创 leetcode:对称二叉树
left.left和right.right,left.right和right.left。当left的值与right的值不相等时。当left或者right有一个为空时。题目:给你一个二叉树的根节点。当left和right都为空时。, 检查它是否轴对称。
2023-10-17 16:39:33 35
原创 leetcode:爬楼梯
从第0个台阶开始爬,假设爬到第n个台阶有f(n)种方法,因为每次只能爬一个或者两个,所以有f(n-1)+f(n-2)=f(n)我们从第0个台阶爬到第0个台阶和第1个台阶,都是只有一种爬法,故而有f(0)=f(1)=1。你有多少种不同的方法可以爬到楼顶呢?
2023-10-12 20:29:43 71
原创 leetcode:求x的算术平方根
计算机无法存储浮点数的精确值,但是指数函数和对数函数的返回值都是浮点数,因此结果会有误差,当x足够大时,会因为这部分误差导致结果错误,因此在得到结果的整数部分ans后,我们还应该确认ans和ans+1哪一个才是真正的答案。将根号x转换为指数函数exp和对数函数ln。题目:给你一个非负整数。
2023-10-12 19:41:01 68
原创 leetcode:二进制求和
在第一轮的计算中,ans的最后一位是x和y相加后的结果,carry的倒数第二位是x和y最后一位相加的进位。接下来每一轮中,由于carry是由x和y按位与并且左移得到的,那么最后会补零,不会影响后面的计算。当进位不为0时,保存x和y的无进位结果:answer = x ^ y。计算当前x和y的进位:carry = (x & y)<< 1。将a和b转化为整数x,y,之后由x保存结果,y保存进位。更新x和y的值,x=answer, y = carry。,以二进制字符串的形式返回它们的和。返回x的二进制形式即可。
2023-10-10 16:42:04 53 1
原创 leetcode: 只出现一次的数字
异或运算:所有数字和0异或结果为原数字,和自己异或结果为0,异或运算满足结合律和交换律。,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。故而让数组中的所有数字进行异或,结果就是只出现了一次的数字。
2023-10-10 15:58:52 23 1
原创 leetcode: 加一
考虑最后一位是否为9,如果不是9,直接加一 ,返回dig即可,如果是9,将其变为0,再考虑前一位是否为9,以此类推,直到第一位,如果dig[0]也是9,那么返回[1]+dig即可。数组所表示的非负整数,在该数的基础上加一。
2023-10-10 15:15:25 63
原创 leetcode:搜索插入位置
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
2023-10-10 14:57:43 55
转载 leetcode:最后一个单词的长度
split()方法通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串。str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。strip() 方法用于移除字符串头尾指定的字符(默认为空格)。,由若干单词组成,单词前后用一些空格字符隔开。str指的是字符串头尾指定的字符。题目:给你一个字符串。num – 分割次数。
2023-10-10 14:47:57 40
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人