自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(163)
  • 收藏
  • 关注

原创 力扣381. O(1) 时间插入、删除和获取随机元素 - 允许重复

bool remove(int val) 如果存在,从集合中移除一个 val 项。bool insert(int val) 将一个 val 项插入到集合中,即使该项已经存在。// 初始化一个空的集合。int getRandom() 从当前的多个元素集合中返回一个随机元素。// getRandom 应该返回 1 或 2,两者的可能性相同。// 返回 true,因为集合不包含 1。// 返回 false,因为集合包含 1。// 返回 true,因为集合不包含 2。// 返回 true,因为集合包含 1。

2024-02-29 00:02:59 916

原创 力扣300最长递增子序列

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。解释:最长递增子序列是 [2,3,7,101],因此长度为 4。给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。输入:nums = [10,9,2,5,3,7,101,18]输入:nums = [7,7,7,7,7,7,7]输入:nums = [0,1,0,3,2,3]

2024-02-24 22:02:27 445 1

原创 双指针算法经典题

解法:先把数组排序,用循环每次固定一个数,然后用一对反向指针固定其它两个数,分别从第一个数的下一个数和最后一个数开始移动,要注意的是第一个数发现重复了要跳过,只要三个数相加等于0,就是一种情况,然后去除和第二个数或者第三个数相等数字的情况,然后就是当三个数相加小于0,第二个数的指针往右移,如果大于0就第三个数的指针往左移。给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!输出:[[-1,-1,2],[-1,0,1]]

2024-02-22 23:38:02 314

原创 数据结构经典应用题-大小根堆

思路:创建一个大根堆和一个小根堆,默认第一个数放入大根堆,然后加入数字的时候判断,如果当前数字大于大根堆堆顶就放入小根堆,否则还是放入大根堆,一旦两个堆之间的差距大于等于2,就要把多的那堆的堆顶元素放入另一堆,如果是奇数数量的数字,默认中位数在多的那一堆的堆顶元素,如果是偶数数量,就是两个堆的堆顶元素相加除以2。// 返回 1.5 ((1 + 2) / 2)如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。例如 arr = [2,3] 的中位数是 (2 + 3) / 2 = 2.5。

2023-07-27 20:41:16 373

原创 力扣234回文链表的三种解法

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true;否则,返回 false。进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?这是一道经典的链表题目,我将用三种解法依次进阶解决。输入:head = [1,2,2,1]链表中节点数目在范围[1, 10。输入:head = [1,2]

2023-04-17 20:41:04 139 1

原创 力扣647 回文子串-马拉车算法

思路:马拉车算法,首先对字符串进行填充改变 前面加"$#“,每个字符中间加一个”#“,新字符串末端加”!",定义一个f数组来维护不同中心的回文子串的最大半径,维护一个回文串最大区间[l, r],然后从1开始枚举新字符串,如果当前中心在前面的区间内,分两种情况,一是半径不超过r,此时f[i]可以取关于[l,r]中心点对称的左边的f[l + r - i],而是半径超过r,就先取到r的距离为f[i],超过的部分再后面暴力枚举。解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”

2023-03-23 17:06:39 251

原创 力扣3无重复字符的最长子串-滑动窗口解法

思路:用一个HashSet来存储每个字符保证不重复,然后不断枚举左指针和右指针,右指针初始值为-1,每次左指针移动一位,就移除set中的一个字符(0位置除外),然后右指针不断移动,并且添加字符,直到出现重复为止,之后就用右指针和左指针的距离去取最大值。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: s = “abcabcbb”

2023-03-15 16:35:35 331

原创 力扣567字符串的排列

用两个数组统计两个字符串在s1字符串长度下每个字符出现的次数,相当于维护一个长度为s1字符串长度的窗口。否则就从s1长度开始,继续遍历一个s1长度的s2字串,然后新进入的字符s2的统计数组在相应字符出现次数加1,出去的字符减1,不断判断两个数组是否相等,相等就找到满足条件的排列。给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。否则,返回 false。输入:s1 = “ab” s2 = “eidbaooo”输入:s1= “ab” s2 = “eidboaoo”

2023-03-13 18:39:31 57

原创 力扣525连续数组

思路:前缀和+哈希表,对数组中的0做特殊处理假定为-1,原问题就转化为求最长的连续子数组,其元素和为0,然后计算前缀和可以很快算出一个区间子数组的和,用哈希来存储当前为某一个和的下标,就比如碰到1就++,碰到0就–,哈希表来维护这个和,要注意默认放一个{0,-1}进哈希表,表示空的前缀的结束下标为-1,之后每遍历一个下标就利用哈希表维护,更新最大长度。说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。

2023-03-08 18:48:42 43

原创 力扣560和为K的子数组

思路:前缀和+哈希表。一个连续子区间[j,i]的和==k相当于是前缀和[i] - 前缀和[j]==k,所以进一步把问题转换成前缀和[i] - k == 前缀和[j],也就是去找有多少个前缀和[j]在前缀和i之前,这时候又可以用哈希表来记录前缀和[j]的数量,要注意的是特殊情况,当第一个nums[0]就等于k,后面就无法取map,所以令map有个默认值{0,1}输入:nums = [1,1,1], k = 2。输入:nums = [1,2,3], k = 3。

2023-03-07 17:43:29 72

原创 力扣713乘积小于k的子数组

设置两个指针i和j,先固定左端点i,枚举右端点j,当一个窗口内的子数组乘积大于等于k时,条件开始不满足,这时候可以变动窗口,也就是把左端点的数除去,然后左端点右移,满足条件的窗口,子数组数量为j-i+1,要每次加上这个数量。解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。输入:nums = [10,5,2,6], k = 100。输入:nums = [1,2,3], k = 0。

2023-03-06 16:11:37 54

原创 力扣209长度最小的子数组

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …思路:利用滑动窗口,定义两个指针为窗口的开始和结束,同时指向0位置,然后加到sum,end不断后移,sum大于等于target时,开始更新子数组最小长度,然后把start减掉,start后移。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]输入:target = 4, nums = [1,4,4]

2023-03-04 19:36:19 369

原创 力扣318最大单词长度乘积

如果不存在这样的两个单词,返回 0。输入:words = [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]输入:words = [“a”,“ab”,“abc”,“d”,“cd”,“bcd”,“abcd”]输入:words = [“a”,“aa”,“aaa”,“aaaa”]解释:这两个单词为 “abcw”, “xtfn”。解释:这两个单词为 “ab”, “cd”。words[i] 仅包含小写字母。解释:不存在这样的两个单词。

2023-03-01 14:55:59 367

原创 力扣338比特位计数

思路:首先明确:奇数的二进制数1的个数一定比前一个偶数多1,而偶数的二进制数1的个数等于除以2之后的二进制数1的个数,因为除以2就是右移把最后一位0消除,所以可以得到状态转移方程。给你一个整数 n ,对于 0

2023-02-27 14:38:56 41

原创 力扣29-两数相除

整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2。给你两个整数,被除数 dividend 和除数 divisor。注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是 [−2。解释: 7/-3 = -2.33333…,向零截断后得到 -2。,向零截断后得到 3。输入: dividend = 10, divisor = 3。输入: dividend = 7, divisor = -3。− 1 ,则返回 2。

2023-02-25 15:56:26 393

原创 力扣-删除有序数组中的重复项

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。判题标准:系统会用下面的代码来

2023-02-24 16:58:02 345

原创 2022-09-22力扣每日一题

思路:一道比较有趣的模拟题,可以考虑定义一个临时数组,然后按顺序拿arr中的元素与pieces中的每一行起始元素作比较,注意pieces[i]的顺序无法改变,所以一旦匹配到第一个元素,就把整个pieces[i]复制到临时数组,退出循环后再将临时数组与arr比较,对上了就返回true,否则就返回false。输入:arr = [91,4,64,78], pieces = [[78],[4,64],[91]]输入:arr = [15,88], pieces = [[88],[15]]arr 中的整数 互不相同。

2022-09-22 14:54:59 194

原创 2022-09-21力扣每日一题

思路:可以用深搜回溯暴力递归,具体就是比较两个字串的每个位置,一旦发现某个位置不一样就开启深搜交换,找到一样的位置进行交换,然后再进入下一层比较下一个位置,一旦发现当前交换次数已经比之前的最小交换次数大,就剪枝,抛弃当前搜索路径,直到最后无法再交换,然后回溯,返回值是比较后较小的交换次数。s1 和 s2 只包含集合 {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’} 中的小写字母。输入:s1 = “abc”, s2 = “bca”输入:s1 = “ab”, s2 = “ba”

2022-09-21 12:00:56 114

原创 2022-09-20力扣每日一题

一种做法是遍历数组内所有元素,得到划分的目标值,将元素依次放入k个子集,使得每个子集元素和等于目标值,整个过程就是遍历到当前元素,看具体放入哪个子集,如果没有溢出就继续往下,否则就回溯,直到遍历完最后的元素,也就是所有元素都已经放到子集里面了,就返回true,如果哪个子集都没法放就返回false,但这个过程会超时,需要优化,优化的点就是先对数组做个降序,优先让大的值先选择子集,还有就是剪枝,一旦发现放当前元素到子集i和上一个子集i-1的结果一样就直接剪枝。每个元素的频率在 [1,4] 范围内。

2022-09-20 16:53:34 109

原创 《Deep Convolution Neural Networks for Twitter Sentiment Analysis》文献研读

(1)推特情感分析技术:目前的研究主要集中在通过分析词汇和句法特征来获取情感特征。这些特征通过情感词、表情符号、感叹号等明确表达。(2)本文介绍了一种基于大型twitter语料库的无监督学习的词嵌入 方法,该方法利用tweet中潜在的上下文语义关系和词语间的贡献统计特征。这些词嵌入与n-grams特征(提取特征,得到特征向量)和单词情感极性得分特征相结合,形成了一组tweet情感特征集。该特征集被集成到一个深度卷积神经网络中,用于训练和预测情感分类标签。

2022-09-17 14:54:09 581

原创 2022-9-13力扣每日一题

670. 最大交换给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例 1 :输入: 2736输出: 7236解释: 交换数字2和数字7。示例 2 :输入: 9973输出: 9973解释: 不需要交换。注意:给定数字的范围是 [0, 10^8^]

2022-09-13 11:52:57 82

原创 python重点基础语法

int、float、布尔型、str、list、tuple、set、dict,用type(变量)就能得到变量类型常用符号 :%s,用于字符串;%d,用于整数;%f,用于浮点数;用法示例:其中%s也可用f表达式代替,两者对比如下%d可以写成例如%03d,此时如果变量位数不足3位会在前面补0%f如果想限制小数位数可以写成例如%.2f变量名 = input(“提示语”)常用转换数据类型的函数:int(x)float(x)str(x)eval(str) 用来计算在字符串中的有效python表达式,并返回

2022-07-08 18:36:10 226

原创 自定义注解实现校验

首先需要准备一个validation组件的maven依赖定义注解其中IsMobileValidator.class也需要自己定义,表示具体的校验方式ValidatiorUtil

2022-06-26 17:16:53 139

原创 2022-06-01每日一题

如果你能使这个正方形,则返回 true ,否则返回 false 。示例 1:输入: matchsticks = [1,1,2,2,2]输出: true解释: 能拼成一个边长为2的正方形,每边两根火柴。示例 2:输入: matchsticks = [3,3,3,3,4]输出: false解释: 不能用所有火柴拼成一个正方形。提示:1

2022-06-02 00:33:00 68

原创 3.无重复字符的最长子串

3. 无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度

2022-05-30 17:32:17 86

原创 2022-05-30每日一题

1022. 从根到叶的二进制数之和给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。返回这些数字之和。题目数据保证答案是一个 32 位 整数。示例 1:输入:root = [1,0,1,0,1,0,1]输出:22解释:(100) + (

2022-05-30 16:47:12 62

原创 2022-05-29每日一题

468. 验证IP地址给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 “IPv4” ;如果是有效的 IPv6 地址,返回 “IPv6” ;如果不是上述类型的 IP 地址,返回 “Neither” 。有效的IPv4地址 是 “x1.x2.x3.x4” 形式的IP地址。 其中 0 <= xi <= 255 且 xi 不能包含 前导零。例如: “192.168.1.1” 、 “192.168.1.0” 为有效IPv4地址, “192.168.01.1” 为无效IPv4地址; “

2022-05-29 18:00:02 147

原创 2022-05-28每日一题

1021. 删除最外层的括号有效括号字符串为空 “”、“(” + A + “)” 或 A + B ,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,“”,“()”,“(())()” 和 “(()(()))” 都是有效的括号字符串。如果有效字符串 s 非空,且不存在将其拆分为 s = A + B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。给出一个非空有效字符串 s,考虑将其进行原语化分解,使得:s = P_1 + P_2 + … + P

2022-05-28 22:07:47 68

原创 2022-05-27每日一题

面试题 17.11. 单词距离有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?示例:输入:words = [“I”,“am”,“a”,“student”,“from”,“a”,“university”,“in”,“a”,“city”], word1 = “a”, word2 = “student”输出:1提示:words.length <= 100000思路:

2022-05-27 23:24:08 124

原创 2022-05-26每日一题

699. 掉落的方块在二维平面上的 x 轴上,放置着一些方块。给你一个二维整数数组 positions ,其中 positions[i] = [lefti, sideLengthi] 表示:第 i 个方块边长为 sideLengthi ,其左侧边与 x 轴上坐标点 lefti 对齐。每个方块都从一个比目前所有的落地方块更高的高度掉落而下。方块沿 y 轴负方向下落,直到着陆到 另一个正方形的顶边 或者是 x 轴上 。一个方块仅仅是擦过另一个方块的左侧边或右侧边不算着陆。一旦着陆,它就会固定在原地,无法移

2022-05-26 23:11:28 116

原创 两数相加(链表)

2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9

2022-05-26 21:16:31 58

原创 2022-05-25每日一题

467. 环绕字符串中唯一的子字符串把字符串 s 看作是 “abcdefghijklmnopqrstuvwxyz” 的无限环绕字符串,所以 s 看起来是这样的:“…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…” .现在给定另一个字符串 p 。返回 s 中 唯一 的 p 的 非空子串 的数量 。示例 1:输入: p = “a”输出: 1解释: 字符串 s 中只有一个"a"子字符。示例 2:输入: p = “cac”输出

2022-05-25 17:56:23 77

原创 两数之和(哈希表解法)

两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], targe

2022-05-24 22:55:24 246

原创 2022-05-24每日一题

965. 单值二叉树如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例 1:输入:[1,1,1,1,1,null,1]输出:true示例 2:输入:[2,2,2,5,2]输出:false提示:给定树的节点数范围是 [1, 100]。每个节点的值都是整数,范围为 [0, 99] 。思路:水题,只需要简单的遍历判断一下即可,这里我用了经典的BFS层序遍历/** * Definition for a

2022-05-24 17:00:16 43

原创 2022-05-23每日一题

675. 为高尔夫比赛砍树你被请来给一个要举办高尔夫比赛的树林砍树。树林由一个 m x n 的矩阵表示, 在这个矩阵中:0 表示障碍,无法触碰1 表示地面,可以行走比 1 大的数 表示有树的单元格,可以行走,数值表示树的高度每一步,你都可以向上、下、左、右四个方向之一移动一个单位,如果你站的地方有一棵树,那么你可以决定是否要砍倒它。你需要按照树的高度从低向高砍掉所有的树,每砍过一颗树,该单元格的值变为 1(即变为地面)。你将从 (0, 0) 点开始工作,返回你砍完所有树需要走的最小步数。 如果

2022-05-23 20:35:47 148

原创 2022-05-22每日一题

464. 我能赢吗在 “100 game” 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和 达到或超过 100 的玩家,即为胜者。如果我们将游戏规则改为 “玩家 不能 重复使用整数” 呢?例如,两个玩家可以轮流从公共整数池中抽取从 1 到 15 的整数(不放回),直到累计整数和 >= 100。给定两个整数 maxChoosableInteger (整数池中可选择的最大数)和 desiredTotal(累计和),若先出手的玩家是否能稳赢则返回 true

2022-05-22 19:15:54 99

原创 2022-05-21每日一题

961. 在长度 2N 的数组中找出重复 N 次的元素给你一个整数数组 nums ,该数组具有以下属性:nums.length == 2 * n.nums 包含 n + 1 个 不同的 元素nums 中恰有一个元素重复 n 次找出并返回重复了 n 次的那个元素。示例 1:输入:nums = [1,2,3,3]输出:3示例 2:输入:nums = [2,1,2,5,3,2]输出:2示例 3:输入:nums = [5,1,5,2,5,3,5,4]输出:5提示:2 <= n

2022-05-21 21:52:00 87

原创 2022-05-20每日一题

436. 寻找右区间给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。返回一个由每个区间 i 的 右侧区间 的最小起始位置组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。示例 1:输入:intervals = [[1,2]]输出:[-1]解释:集合

2022-05-20 19:32:52 58

原创 2022-05-19每日一题

462. 最少移动次数使数组元素相等 II给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最少移动数。在一步操作中,你可以使数组中的一个元素加 1 或者减 1 。示例 1:输入:nums = [1,2,3]输出:2解释:只需要两步操作(每步操作指南使一个元素加 1 或减 1):[1,2,3] => [2,2,3] => [2,2,2]示例 2:输入:nums = [1,10,2,9]输出:16提示:n == nums.length1 &

2022-05-19 17:09:48 99

原创 2022-05-18每日一题

668. 乘法表中第k小的数几乎每一个人都用 乘法表。但是你能在乘法表中快速找到第k小的数字吗?给定高度m 、宽度n 的一张 m * n的乘法表,以及正整数k,你需要返回表中第k 小的数字。例 1:输入: m = 3, n = 3, k = 5输出: 3解释:乘法表:1 2 32 4 63 6 9第5小的数字是 3 (1, 2, 2, 3, 3).例 2:输入: m = 2, n = 3, k = 6输出: 6解释:乘法表:1 2 32 4 6第6小的数字是 6 (1,

2022-05-18 17:23:08 72

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除