leetcode
剑指offer
RUNEUN
这个作者很懒,什么都没留下…
展开
-
LeetCode-038. 每日温度
【代码】LeetCode-038. 每日温度。原创 2023-06-06 15:20:18 · 26 阅读 · 0 评论 -
LeetCode-037. 小行星碰撞
【代码】LeetCode-037. 小行星碰撞。原创 2023-06-06 11:12:21 · 63 阅读 · 0 评论 -
LeetCode-033. 变位词组
【代码】LeetCode-033. 变位词组。原创 2023-06-05 16:16:52 · 23 阅读 · 0 评论 -
LeetCode-034. 外星语言是否排序
【代码】LeetCode-034. 外星语言是否排序。原创 2023-06-05 17:47:07 · 22 阅读 · 0 评论 -
LeetCode-021.删除链表的倒数第 n 个结点
添加一个哑节点(dummy node),它的 nextnext 指针指向链表的头节点。在遍历链表的同时将所有节点依次入栈。原创 2023-05-19 14:45:37 · 21 阅读 · 0 评论 -
LeetCode-023. 两个链表的第一个重合节点
指针 pA 移动了 a+c+b 次、指针 pB 移动了 b+c+a 次之后,两个指针会同时到达两个链表相交的节点,该节点也是两个指针第一次同时指向的节点,此时返回相交的节点。2、链表 headA和 headB的长度分别是 a+c 和 b+c。1、如果当前节点在哈希集合中,则后面的节点都在哈希集合中,原创 2023-05-19 20:37:58 · 31 阅读 · 0 评论 -
LeetCode-022. 链表中环的入口节点
fast 与 slow。它们起始都位于链表的头部。随后,slow 指针每次向后移动一个位置,而 fast 指针向后移动两个位置。如果链表中存在环,则 fast 指针最终将再次与 slow 指针在环中相遇。原创 2023-05-19 16:48:24 · 21 阅读 · 0 评论 -
LeetCode-035. 最小时间差
【代码】LeetCode-035. 最小时间差。原创 2023-06-05 20:04:18 · 42 阅读 · 0 评论 -
LeetCode-024. 反转链表
【代码】LeetCode-024. 反转链表。原创 2023-05-20 22:55:27 · 29 阅读 · 0 评论 -
LeetCode-030. 插入、删除和随机访问都是 O(1) 的容器
为了满足插入、删除和随机访问元素操作的时间复杂度都是 O(1),需要将变长数组和哈希表结合,变长数组中存储元素,哈希表中存储每个元素在变长数组中的下标。原创 2023-05-30 20:50:23 · 60 阅读 · 0 评论 -
LeetCode-032. 有效的变位词
【代码】LeetCode-032. 有效的变位词。原创 2023-06-05 12:09:12 · 29 阅读 · 0 评论 -
LeetCode-029. 排序的循环链表
最后节点:left>right:插入点比left大或者比right小,则在此处插入。left<right:要求 left<insert<right。原创 2023-05-29 16:26:11 · 21 阅读 · 0 评论 -
LeetCode-026. 重排链表
2、利用线性表存储该链表,然后利用线性表可以下标访问的特点,直接按顺序访问指定元素,重建该链表即可。原创 2023-05-29 10:20:08 · 57 阅读 · 0 评论 -
LeetCode-028. 展平多级双向链表
dfs(cur)实现展平,cur为当前结点,若cur无child,则在此处无需展平,考察下一个结点cur.next。否则总是递归调用dfs(cur.child)展平以child为首后续部分。展平后应当能返回展平链的最后一个结点last,并连接cur.next与last,因此dfs应返回last结点。原创 2023-05-29 15:19:35 · 44 阅读 · 0 评论 -
LeetCode-031. 最近最少使用缓存
HashSet(哈希表): 查询快,增删慢。(底层其实就是Map)。存放的引用类型需重写hashCode()和equals()方法。Set(集):元素无序,不可重复 (没有索引)。List(列表):元素有序,元素可以重复 (有索引)。通过元素的equals()方法判断是否重复。LinkedHashSet(哈希链表): 查询慢,增删快。Collection(集合):容器,用于存放对象(引用类型。ArrayList(数组列表): 查询快,增删慢。LinkedList(链表): 查询慢,增删快。原创 2023-05-31 21:50:28 · 168 阅读 · 0 评论 -
LeetCode-027. 回文链表
【代码】LeetCode-027. 回文链表。原创 2023-05-29 11:34:05 · 24 阅读 · 0 评论 -
LeetCode-036. 后缀表达式
【代码】LeetCode-036. 后缀表达式。原创 2023-06-05 20:30:22 · 36 阅读 · 0 评论 -
LeetCode-025. 链表中的两数相加
【代码】LeetCode-025. 链表中的两数相加。原创 2023-05-21 20:17:12 · 23 阅读 · 0 评论 -
LeetCode-016.不含重复字符的最长子字符串
s 由英文字母、数字、符号和空格组成。原创 2023-05-17 19:20:16 · 24 阅读 · 0 评论 -
LeetCode-020.回文子字符串的个数
O(n 2) 的时间枚举出所有的子串 s[l ⋯ r ],然后再用 O(r −l +1) 的时间检测当前的子串是否是回文,整个算法的时间复杂度是 O(n^3)。枚举回文中心的是 O(n) 的,对于每个回文中心拓展的次数也是O(n) 的,所以时间复杂度是 O(n^2 )3、Manacher 算法。原创 2023-05-18 15:48:31 · 129 阅读 · 0 评论 -
LeetCode-017. 含有所有字符的最短字符串
【代码】LeetCode-017. 含有所有字符的最短字符串。原创 2023-05-18 13:41:36 · 57 阅读 · 0 评论 -
LeetCode-014. 字符串中的变位词
用一个变量 diff来记录 cnt1与 cnt2的不同值的个数,这样判断 cnt1和 cnt2 是否相等就转换成了判断 diff 是否为 0。每次窗口滑动时,只统计了一进一出两个字符,却比较了整个 cnt1 和 cnt2 数组。原创 2023-05-17 11:20:28 · 50 阅读 · 0 评论 -
LeetCode09-乘积小于 K 的子数组
固定左指针,移动右指针,当满足条件时:移动左指针。原创 2023-05-04 11:07:51 · 23 阅读 · 0 评论 -
LeetCode-015. 字符串中的所有的变位词
【代码】LeetCode-015. 字符串中的所有的变位词。原创 2023-05-17 15:38:27 · 36 阅读 · 0 评论 -
LeetCode11-0和1个数相同的子数组
当遇到重复的前缀和时,根据当前下标和哈希表中存储的下标计算得到的子数组长度是以当前下标结尾的子数组中满足有相同数量的 0 和 1 的。下标 j+1 到下标 k(其中 j<k)的子数组的元素和为 Sums[k]−Sums[j],该子数组的长度为 k−j。将数组中的 0 视作 −1,则原问题转换成【求最长的连续子数组,其元素和为 0】元素和=0时————个长度为k−j 的子数组中有相同数量的 0 和 1。数组中只有0和1 ======> 只需维护一个变量。使用哈希表存储每个前缀和。0 和 1 的数量相同。原创 2023-05-12 17:40:02 · 65 阅读 · 0 评论 -
LeetCode07-数组中和为 0 的三个数
枚举的三元组 (a,b,c) 满足 a≤b≤c,可以避免重复操作。第二重循环:确定j,k的位置——相邻元素相同跳过,同时确保j<k。第一重循环(i):j,k重新赋值;相邻两次枚举的元素不能相同。将数组中的元素从小到大进行排序,1、排序 + 双指针。原创 2023-04-26 15:46:15 · 35 阅读 · 0 评论 -
LeetCode08-和大于等于 target 的最短子数组
数组 sums 用于存储数组 nums 的前缀和,其中 sums[i] 表示从 nums[0] 到 nums[i−1] 的元素和。如果 sum≥target,从 sum 中减去nums[l++],更新子数组长度(双指针)此时子数组的长度是bound−(i−1)2、前缀和 + 二分查找。原创 2023-04-26 17:50:49 · 67 阅读 · 0 评论 -
LeetCode10-和为 k 的子数组
L...R]这个子数组和为k——可以转化为 * sum[R] - sum[L-1] == k *以R结尾的和为k的连续子数组个数只要统计右多少个前缀和为sum[R]-k的sum[L-1]即可。建立HashMap,以sum[R]为键,出现次数为对应的值,记录sum[L]出现的次数。从左往右边更新边计算的时候已经保证了map里记录的sum[L]的范围是0原创 2023-05-12 09:36:24 · 97 阅读 · 0 评论 -
LeetCode-018. 有效的回文
直接在原字符串s 上使用双指针。在移动任意一个指针时,需要不断地向另一指针的方向移动,直到遇到一个字母或数字字符,或者两指针重合为止。原创 2023-05-18 14:09:42 · 21 阅读 · 0 评论 -
LeetCode-019.最多删除一个字符得到回文
【代码】LeetCode-019.最多删除一个字符得到回文。原创 2023-05-18 14:37:02 · 65 阅读 · 0 评论 -
LeetCode12-左右两边子数组的和相等
nums[i]----左边:sum;右边:total-sum-nums[i]sum起始:0 //中心数位于数组最左端,左侧和视为0。原创 2023-05-12 18:12:32 · 25 阅读 · 0 评论 -
LeetCode13-二维子矩阵的和
将 sums 的列数设为 n+1 的目的是为了方便计算每一行的子数组和,不需要对 col1=0 的情况特殊处理。col1-col2的元素和:sums[i][col2 + 1] - sums[i][col1];初始化时对矩阵的每一行计算前缀和。原创 2023-05-12 20:48:31 · 27 阅读 · 0 评论 -
LeetCode05-单词长度的最大乘积
判断第 i 个单词和第 j 个单词是否有公共字母可以通过判断 masks[i] & masks[j]是否等于 0 实现,只包含小写字母,共有 26 个小写字母,因此可以使用位掩码的最低 26 位分别表示每个字母是否在这个单词中出现。1、通过位运算操作判断两个单词是否有公共字母。原创 2023-04-25 17:35:24 · 30 阅读 · 0 评论 -
LeetCode06-排序数组中两个数字之和
数组有序且题目确保有唯一的答案,使用双指针一定可以找到答案。原创 2023-04-25 17:57:07 · 36 阅读 · 0 评论 -
LeetCode04- 只出现一次的数字
方法获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值。统计所有数字的各二进制位,并对 3 求余,结果则为只出现一次的数字(目标结果)第 i 个二进制位: (n >>(31-i)) & 1。求和后%3一定是0(对于二进制而言)出现的次数都是 3 的倍数。2、对于出现三次的数字,各。高位,右边是低位,左边是高位。任何的数字与自己异或都是0。原创 2023-04-22 21:56:42 · 30 阅读 · 0 评论 -
LeetCode03-前 n 个数字二进制中 1 的个数
另: n是2的整数次幂时,n+1的二进制表示中:bits[n+1]=bits[n]+1。判断一个正整数是不是 2 的整数次幂,根据位运算&:n&(n-1)=0。一般数组是不能添加元素的,因为他们在初始化时就已定好长度。n为奇数:bits[n]=bits[n/2]+1。n 除以 2 的余数可以通过 n & 1 得到。n为偶数:bits[n]=bits[n/2]原创 2023-04-22 16:55:08 · 78 阅读 · 0 评论 -
LeetCode01-整数除法
最大值为Integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE,即-2147483648。在JDK中,整型类型是有范围的 -2147483648~2147483647 ( -2^31 --- 2^31-1)注意一个递归调用的出口或者停止位。原创 2023-04-18 15:18:14 · 96 阅读 · 1 评论 -
LeetCode02-二进制加法
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。StringBuilder 相较于 StringBuffer 有速度优势。原创 2023-04-20 15:34:18 · 115 阅读 · 0 评论