《JDFrame》《FastRetry》《UniHttp》作者
获得徽章 17
我的交流群不定时会有招聘信息发布,欢迎有求职意愿的朋友加入资源共享~
有想入职深圳 byd 的兄弟吗 base 深圳 薪资在 25-35k 职位有 java golang php python 前端 客户端 。联系邮箱: 1348773883@qq.com ,jd 在下面(比较急 hr 都快疯了)
【社招】【百度内推】,职级T4+的都可以
Base:北京、上海、深圳、成都。薪资一般20K+
私信或者直接简历+职位发送到xujiahao01@baidu.com都行
可以在这上面看职位:talent.baidu.com
福利:
1、免费班车,晚上打车
2、免费早餐夜宵,午餐补贴
3、年假12天起,大工位
4、12%公积金,入职2年给父母提供免费商业保险
5、定期团建,mac pro办公
根据之前的历史,通过率还是比较高的哈
# leetcode72 编辑距离
思路:
1、状态:
dp[i][j] 表示以i结尾的单词A 转成以j结尾的单词B 最小编辑距离
2、递推方程
假设两个单词 A: ***i 和 B: ***j , 则从单词 A 转成 单词B的 编辑距离以下编辑情况:
当A[i] == B[j] 时不需要编辑, 所以状态同上一步
dp[i][j] = dp[i-1][j-1]
当 A[i] != B[j]时 需要进行编辑:并且有三种编辑情况
a)、替换编辑
从状态dp[i-1][j-1] 开始编辑, 表示 对 i 或者 j进行一次替换操作即可编辑完成
b)、删除操作
从状态dp[i-1][j] 开始编辑, 也就是 A的 *** 部分变成B的 ***j 部分是已知的, 则此时A编辑后是****ji, 所以只需要删除一次i 即可编辑完成与B一致。
c)、增加操作
从状态dp[i][j-1]开始编辑,也就是 A的 ***i部分 变成B的***部分是已知的, 则此时A编辑后是 ***, 所以只需要增加一次 j 即可编辑完成与B一致。
所以 dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
3、初始状态
增加空行,然后从空开始递推第一行和第一列的状态, 从空变成有 和 从有变成空 就是增加操作 和 删除操作。如下图:
"" r o s
-----------------
"" | 0 | 1 | 2 | 3 |
-----------------
h | 1 | | | |
----------------
o | 2 | | | |
----------------
r | 3 | | | |
----------------
s | 4 | | | |
----------------
e | 5 | | | |
----
#leetCode 1656. 设计有序流
思路:
就是把描述的业务过程实现出来即可, 主要是在插入的时候判断当前指针ptr的值和插入的idkey是否相等,相等的时候就需要去从当前指针ptr开始找出最长的连续序列即可。找最长的连续序列扫一遍,如果为null说明不连续返回即可。
594. 最长和谐子序列
思路1: 排序 + 滑动窗口. 时间复杂度 O(NlogN)
先对nums排序, 然后 定义窗口[i,j], 枚举每一个窗口右边界为j的, 即使用右边界去滑动窗口. 滑动过程中, 如果发现窗口差值过大, 则需要缩小窗口差值, 则左边界要++, 直到窗口差值小于等于1. 然后判断窗口差值是否为1, 如果是计算窗口长度, 否则说明窗口差值过小,则继续扩大右边界,即j++
思路2: 找规律 + 哈希表 + 计数。 时间复杂度 O(N)
这里有一个隐性的规律,就是符合条件的子序列排序后 一定是这样的 [a,...a,a+1,a+1...a+1]
所以如果子序列右边界为nums[i], 则满足条件的子序列左边界一定是nums[i]-1, 所以此时只需要知道 nums[i]的个数 和 nums[i]-1的个数, 就可以知道子序列的长度, 所以需要先对nums计数.
leetcode: 239. 滑动窗口最大值
思路1: 暴力, 固定窗口滑动O(N^2)
定义窗口左右边界,然后直接滑动,然后直接一层循环求窗口内的最大值即可。
思路2: 对如何获取窗口内的最大值进行优化
使用一个双端队列(队头大,单调递减队列) 去维护窗口内的所有元素及其顺序,这样就能O(1)获取最大值
2.1) 如何维护这个双端队列
这个双端队列需要存储窗口内的所有元素, 并且按照从大到小的顺序排列,
假设已经存在队列(左边是队头,值大到小) : [a,b,c,d] , 现在窗口滑动后需要加入一个元素e
这时候我们需要找到e在队列中的位置并插入进去, 因为队列本身是有序的,只需要从队尾开始往前找即可, 又因为其实当窗口内准备加入一个元素e后, 其实窗口内比e小的元素已经没有必要再维护了, 直接在队列中删除掉即可, 所以最后的逻辑就是 把队列中国呢所有比e小的元素都删除掉,然后再把e插入队尾即可, 假设c和d都小于e, 先删除c和d再把e插入队尾即可,最后变成[a,b,e]. 维护成功后就可以方便的获取窗口内的最大值了
base 深圳
【大宇无限广纳贤才】
高薪高福利高成长!急招 Android、Web 前端、Java 开发工程师、广告策略产品经理、数据产品经理!其余众多岗位仍有 HC
【无限福利】
1、六险一金:社保公积金全额缴纳,公积金缴纳比例12%,
2、薪资行业领先,15 薪,高绩效高回报
3、双休,每月一天带薪病假;每年最少 8 天年假,试用期有部分年假
4、不打卡,弹性上班,不提倡加班
5、标配MacBook Pro,Dell显示器,升降桌等
6、免费高逼格三餐,免费的咖啡、零食、小吃
7、若 21:50 之后下班,按公司规定报销车费
8、定期外出团建,每年集体出游
9、每周运动社团活动(羽毛球、乒乓球、篮球、网球、游泳、跑步)
微信:lbjccccc38
53. 最大子序和
思路1: 暴力 时间复杂度 n(n+1)/2 => 总体时间复杂度: O(n^2)
假设 i 表示窗口的起始点, 然后计算每个以 i 起始点的每个窗口大小(从1,2,3...N)的和, 进而求出其中窗口最大和
思路2: 动态规划 时间复杂度: O(N)
状态: f[n] 表示 以第n个数为结尾的子窗口的最大和
状态转移方程:
f[n] = max(f[n-1] + nums[n], nums[n])
因为当 f[n-1]] > 0时, 说明为增益效果。 所以此时以n为结尾的最大连续区间和就是 f[n-1] + nums[n]
而当 f[n-1] < 0 时, 说明为负增益效果。 所以此时以n为结尾的最大连续区间和就是 nums[n]
思路3: 贪心算法 时间复杂度: O(N)
从左到右迭代累加计算以 i 为结尾的连续窗口的和sum, 如果sum < 0, 舍弃前面部分, 直接重新计算窗口和sum
题目 495. 提莫攻击
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。
你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。并且中毒效果不能叠加, 如果已在中毒状态中再次攻击, 会开启新一轮的中毒效果, 上次中毒效果中止
下一页