LeetCode每日一题
沉默....后....的...爆发.
它是站在海岸遥望海中已经看得见桅杆尖头了的一只航船,它是立于高山之巅远看东方已见光芒四射喷薄欲出的一轮朝日...
展开
-
字符串相加和相乘
【代码】字符串相加和相乘。原创 2023-08-31 12:47:41 · 73 阅读 · 0 评论 -
1254. 统计封闭岛屿的数目
【代码】1254. 统计封闭岛屿的数目。原创 2023-06-18 17:43:06 · 68 阅读 · 0 评论 -
1090. 受标签影响的最大值
有两个比较首先是让labels标签升序,选不超uselimit重复的所有标签,并且当标签相同时,让value更大的靠前,也就是第二比较册略是升序value。去重后,还要对unique_vec进行value排序,因为之前的排序是为了去重,同时尽可能保留每一组标签的值最大。此时unique_vec的性质是,每个标签不会多于uselimit,并且保留的标签都是那一组标签的值最大的。还没有完,这样得到的集合,还要进行去重,重复限制是uselimit。两个数组,要形成映射,也就是要组合起来才能排序,求子集和最大。原创 2023-05-23 11:04:05 · 101 阅读 · 1 评论 -
扑克牌中的顺子
首先想到的思路是排序,然后找差值dis和zero个数比较,差值是要不连续的那种差就是 例如两数:a,b 这里的差值是 dis=a-b-1 还要再减一,如果zero==dis那说明变一变可以变成顺子,直接写出。但是其实不用判断可扩展,因为可以两头扩展,这个序列是5个,小于13,所以只要修改之前true的判断,对于zero大于dis也是true,而不仅仅只是zero==dis才返回true。解决:这种情况说明此时zero > dis 大小王有富裕,判断序列是否可扩展。原创 2023-04-07 22:48:50 · 174 阅读 · 0 评论 -
72.编辑距离
【代码】72.编辑距离。原创 2023-04-01 00:05:13 · 47 阅读 · 0 评论 -
1574. 删除最短的子数组使剩余数组有序
从前往后遍历,找到删除中间的序列,这里的序列都是子数组(必须是连续的),要注意一个问题就是会出现left指针大于right指针的情况,此时应该让right向后移动。让或操作,并让left == 0在前面这样就不会出现数组越界问题,因为left=0时,不会去判断后面的语句。left停下的位置,之前都是有序的,只要保证此时arr[left] <= arr[right]即可。这个for里的判断条件:left==0 || arr[left-1] <= arr[left]注意不需要删除的情况和边界判断。原创 2023-03-25 12:33:02 · 51 阅读 · 0 评论 -
字符串(数字)相加
字符串相加,有很多地方要注意,两串长不一致,进位数据的保存,和两数相加后的进位处理,以及循环控制,和边界判断。原创 2023-03-13 09:18:01 · 558 阅读 · 0 评论 -
1487. 保证文件名唯一
是有必要的,因为index.count()通过键值映射找到对应的值,如果之前出现str,str(1)那么没有继续向后寻找的话就会出现,所添加的新串依然出现重复,要对后缀从k开始不断增加,直到找到一个没有重复的,这个后缀也是能保证文件名唯一的最小正整数。原创 2023-03-03 20:31:25 · 65 阅读 · 0 评论 -
【无标题】
【代码】【无标题】原创 2023-03-02 15:21:21 · 32 阅读 · 0 评论 -
1247. 交换字符使得字符串相同
【代码】1247. 交换字符使得字符串相同。原创 2023-02-25 19:27:24 · 49 阅读 · 0 评论 -
LeetCode :645.错误的集合
它其实变相保存了这一组数据,第二遍异或完整的序列,那么之前的元素遇到相同的元素异或就为0,即舍去了,最终会剩下一个元素这个元素只能是重复或缺失的(即:0 ^ dup=num1或num2 ),对另一组num2也是这个道理,首先我们分析num的值,为dup和mis的不同位构成,通过 num^(-num) = lowbit,提取不同位里第一次出现不同的位置,将最靠右的1作为鉴别点,由此将nums中的元素分为两组num1,num2(dup和mis肯定在不同组中)所以得到num = dup^mis。原创 2023-02-16 16:12:27 · 37 阅读 · 0 评论 -
字符串阶解码
【代码】字符串阶解码。原创 2023-02-09 17:27:36 · 55 阅读 · 0 评论 -
【无标题】
【代码】【无标题】原创 2023-02-08 16:35:15 · 41 阅读 · 0 评论 -
【无标题】
遍历,这样节省空间,不用另外创建空间,直接双for肯定是有问题的,因为数组中存放多个字符串,串长不同,所以就要四个变量来确定当前遍历的位置,如果发现不等就立即退出,每次换下一个串的时机,不能是内层for退出,是到该串的结尾,就要换下一个串,而且另一个串不一定也要换,所以要进行判断,并且换串后,对之前遍历串的下标重新置0。一个遍历敲了20分钟,太菜了,看了题解有自己略有不同,确实代码精简,秒。原创 2022-11-01 09:33:22 · 100 阅读 · 1 评论 -
【最短的桥】
明确两个岛不会相连,所求翻转0的最小数目,就是两个岛之间的最短距离,那么距离该怎么求,想到用广度优先,让某一岛的所有结点都向四个方向扩展一圈,视为step=1;如果在扩展中遇到了岛2,那么说明以及连接成了一座岛,立即return step;总结:中等题目好难,与图有关的题好复杂,时间复杂度一般也高,代码量也多,真的太难了,理解原理还行,只不过自己想不出来,看过题解大概懂了,不过代码根本无从下手,对bfs理解不够深入,运用就更扯了,题解代码看了一小时,写了注释,基本看懂。扩展一圈完成才能step++原创 2022-10-25 21:02:55 · 384 阅读 · 0 评论 -
915. 分割数组
我的写法:(双重for的低能算法,能用就行,剩下的交给运维)时间复杂度:O(n)空间复杂度:O(1)原创 2022-10-24 11:53:25 · 57 阅读 · 0 评论 -
Leetcode每日一题:901. 股票价格跨度(c++拉胯的一天)
这个算法可以说是最好的了,每次while都执行不了O(n)次,跳跃式寻找,并且遇到大于就退出了,感觉也就循环一两次即可。基本可视O(1)~O(n)c++好像不能不指定类型,没想到c++也有拉胯的一天。这是java代码的提交结果。要更好的算法可以采用单调栈。原创 2022-10-21 18:57:15 · 306 阅读 · 1 评论 -
779. 第K个语法符号
可以采用递归:如果是第一层,直接返回0,否则求它的父亲。(n,k)的父亲的位置,就是(n-1,(k+1)/2),第二个参数代表k/2向上取整。而某个位置是左孩子还是右孩子,可以判断k是否为奇数,如果是奇数,就是左孩子,那就应该与父亲相同,否则相反。可以看出,某一个位置是1还是0,只取决于它的父亲以及它是left还是right。假如是左孩子,就与父亲相同;所以,我们要判断某一个位置,就要先求它的父亲,然后根据位置判断是否取反即可。0,而0异或一个数不改变值,所以我们将k%2取反再与父亲异或即可。原创 2022-10-20 20:35:32 · 45 阅读 · 0 评论