- 博客(36)
- 收藏
- 关注
原创 Leetcode.42 接雨水
从左到右按每一列来看,只要左右两边的柱子高于自身柱子的高度即能接得住水,而装水的多少,根据木桶效应,我们只需要看左边最高的墙和右边最高的墙中较矮的一个就够了。所以此时能接得住1格子水。
2023-07-31 22:47:01
106
原创 Leetcode.33 搜索旋转排序数组
1、如果[l, mid - 1] 是有序数组,且 target 的大小满足nums[l]<=target<nums[mid],则我们应该将搜索范围缩小至 [l, mid - 1],否则在 [mid + 1, r] 中寻找。2、如果 [mid, r] 是有序数组,且 target 的大小满足nums[mid]<target<=nums[r],则我们应该将搜索范围缩小至[mid + 1, r],否则在 [l, mid - 1] 中寻找。我们将数组从中间分开成左右两部分的时候,一定有一部分的数组是有序的。
2023-07-30 16:08:36
171
原创 Leetcode.31 下一个排列
下一个排列意思就是一个数组给定若干个数字,将其组合为一个整数。如何将这些数字重新排列,以得到下一个更大的整数。
2023-07-29 21:46:55
103
原创 Leetcode.15 三数之和
首先对数组进行排序,排序后固定一个数 nums[i],再使用左右指针指向nums[i]后面的两端,数字分别为nums[L]和nums[R],计算三个数的和 sum 判断是否满足为0,满足则添加进结果集。4、同理,当sum=0时,nums[R] = nums[R-1] 则会导致结果重复,应该跳过,R–2、如果nums[i] = nums[i−1],则说明该数字重复,会导致结果重复,所以应该跳过,3、当sum=0时,nums[L] = nums[L+1] 则会导致结果重复,应该跳过,L++
2023-07-28 21:20:24
84
原创 Leetcode.11 盛最多水的容器
木桶短板效应, 面积等于较短边的长度*两边之间的距离,所以用双指针分别在一头一尾然后向中间移动。其实更通俗的说法,面积由较短边决定,那我们就应该让较短边尽量大,所以舍弃现在较小的边。begin指针指向开头,end指针指向最后,求面积后较短的边向中间移动。我们先假设移动的是较长边a,保留较短的边b,然后分情况讨论。1、假如移动后a1>b,此时的面积还是由较短边b决定,2、假如移动后a1<b,此时面积由较短边a1决定,
2023-07-27 18:28:08
71
原创 Leetcode.5 最长回文子串
2、如果去掉 s[i…j] 头尾两个字符子串 s[i + 1…j - 1] 的长度严格小于 2(不构成区间),为" "或者"b"这种情况,即最中间是空或者只有一个字符,即此时的字符串长度(j-1)-(i+1)+1<2,即j-i<3,此时 s[i…j] 是否是回文只取决于 s[i] 与 s[j] 是否相等。j] 是否是回文取决于s[i] 与 s[j] 是否相等且s[i + 1…j - 1]是否为回文串。1、字符串只有一个字符,则是回文串直接返回该字符串。
2023-07-27 16:58:13
71
原创 Leetcode.4 寻找两个正序数组的中位数
暴力解的,就是按升序合并两个数组,存到新数组c中,然后再分情况判断c的长度是奇数还是偶数,奇数则中位数就是。,注意因为输出是double类型,所以要除2.0000。
2023-07-27 00:48:44
64
原创 Leetcode.3 无重复字符的最长字串
2、end指针每次向后移动一次后,使用for循环遍历看start和end之间的字符有没有和end新指向的字符相同,若有则将start指针移动到相同字符的后面,并更新此时的无重复字符串长度。1、设置start和end指针,start指向无重复字符串的第一个字符,end指向无重复字符串的最后,并且一直向后移动。3、记录无重复字符串长度为num=end-start,取最大值。
2023-07-26 23:22:00
74
原创 Leetcode.2 两数相加
思路:链表逆序存储数字,则链表头部节点开始分别代表个十百千位,两个链表对应节点相加即为和的相应位,注意考虑进位的情况,所以结果链表节点的值为(l1+l2+flag)%10,同时记录该位相加完是否有进位。2、两个指针的作用,head用来记录链表头结点用于函数返回,tail用于链表尾插法插入元素。1、两个链表都遍历完后,最后一位进位需要添加至链表结尾。
2023-07-25 23:17:38
87
原创 Leetcode.617 合并二叉树
4、令root->left再走一遍前三步的流程,注意传入的参数是两颗二叉树同个位置的节点,所以是root1->left和root2->left,都是left。3、都不为null,则将root1的值改成root1+root2,此时根节点root已合并完成,接下来就是递归。5、同第四步,令root->right再走一遍前三步的流程。1、先判断root1是否为null,是则返回root2。2、判断root2是否为null,是则返回root1。6、最后返回root1。
2023-07-25 15:39:00
128
原创 Leetcode.461 汉明距离
题意是求x和y二进制数有几位不同,即求x和y异或后的结果有几个1,因为0和1异或结果=1。2、求1的个数可以采用逐位判断后右移的方法,若末位为1则n+1,接着右移。3、重复循环第二步直到res=0。
2023-07-24 23:23:03
82
原创 Leetcode.448 找到所有数组中消失的数字
要考虑一个问题就是:有可能我们拿到的这个nums[i]已经是被加过len了,所以index不能直接取nums[i]-1,而是要(nums[i]-1)对len取余数,即。那么数值小于等于len的,一定没有进行+len这个操作,则可以认为这个位置所对应的下标没有出现过,则放入数组res中返回。完成一次循环后此时如果出现过的数字,那这个数字作为下标的地方那个数值一定会大于len。
2023-07-24 19:46:45
76
原创 Leetcode.338 比特币计数
偶数:偶数的最低位一定是0,偶数是相当于被某个更小的数乘2,在二进制运算中,就是左移一位,也就是在低位多加1个0,那样就说明dp[i] = dp[i / 2],因为补0不影响1的个数。那样就说明dp[i] = dp[i-1] + 1,当然也可以写成dp[i] = dp[i / 2] + 1。奇数:奇数由不大于该数的偶数+1得到,偶数+1在二进制位上会发生什么?会在低位多加1个1,
2023-07-22 17:08:15
216
原创 Leetcode.283 移动零
2、i指针向后移动,遍整个nums数组,如果 nums[i]!= 0,也就是说遇到了非0元素,此时我们就将nums[i]元素放置到nums[k]位置,同时k++后一位。1、定义两个指针i和k,初始化i = 0,k = 0。3、最后将k位置之后的元素都赋值为0。
2023-07-22 16:28:22
82
原创 Leetcode. 234 回文链表
2、从慢指针开始反转后半段链表,注意下图,中间节点要指向null,所以在代码初始化rhead为null。3、从head和rhead出发一步一步遍历比较val,若不相同则返回false,全部相同则返回true。1、快慢指针,快指针走到结尾时慢指针走到中间。
2023-07-22 16:04:47
77
原创 Leetcode.206 反转链表
4、完成反转后将cur指针和pre指针都向后移(先移动pre,另pre=cur,cur指向一开始temp保存的节点。2、定义一个临时指针变量temp指向cur->next(因为下一步要改变cur->next。5、最后return pre是因为反转链表完成后pre指向头节点。1、定义一个pre指针指向null,一个cur指针指向head。3、反转,将cur->next 指向pre。
2023-07-13 21:52:36
74
1
原创 Leetcode.141环形链表
思路有点类似小学的相遇追及问题,一个速度快一个速度慢的两个人在跑道上匀速跑,若干圈后他们总会相遇,就用这个来证明链表中有环的存在。
2023-07-13 21:15:40
59
1
原创 Leetcode.160相交链表
思路看的这里看完之后有个疑惑的点,有没有可能两个链表相交后又分开了,为什么相交后一定就只有一条链表,后来想了一下,一个节点可以多个节点指向,但不能自己指向多个别的节点,所以相交节点后面一定是全部重合的,我傻了orz。
2023-07-13 18:41:21
129
1
原创 Leetcode.136只出现一次的数字
因为异或运算满足交换律,所以可以把相同的放在一起运算变成零,最后会剩下只出现一次的数字与0异或,结果也是只出现一次的数字。
2023-07-12 21:33:55
129
1
空空如也
yolov5推理速度如何得到
2023-01-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅