O(n) time O(1) space
1 | class Solution: |
这道题不需要保存负号,直接转即可
1 | class Solution { |
O(n) time O(n) space
1 | class Solution { |
O(n) time O(1) space
1 | class Solution: |
这道题不需要保存负号,直接转即可
1 | class Solution { |
O(n) time O(n) space
1 | class Solution { |
O(n) time O(n) space
用辅助字符串组来保存每一行的字符串,通过调整step来决定是从上往下放字符还是从下往上放字符,当指针指向第一行则从上往下,当指针指向最后一行则从下往上
1 | class Solution: |
1 | class Solution { |
manacher’s algorithm可以O(n)但是不会
O(n2)
1 | class Solution: |
1 | class Solution: |
1 | class Solution { |
因为回文串是对称的,所以枚举所有可能的对称轴
对称轴可能是某个字符,也可能是两个字符中间,填充#符号来避免奇偶问题
枚举每个可能的对称轴,从对称轴开始向左右两边比较字符直到找到不一样的或者越界,然后左右指针均回退一个(回退以后一定都是指向#符号),更新全局左右指针
最后重建原字符串里的最长回文子字符串
O(n2)
1 | class Solution: |
1 | class Solution { |
1 | class Solution { |
memo+recursive
f(l, r)表示s[l:r]中最长的回文串的长度
1 | class Solution { |
二分法O(log(m+n))
题解
把原题转换成给定两个排好序的数组,找出其中第k小的数(k是1-based)
复杂度计算:少1/4,少1/8,少1/16,直到逼近中位数
1 | class Solution: |
1 | class Solution: |
1 | class Solution { |
1 | class Solution { |
O(log(m+n))二分法
把原题转换成找第k小的数,k=(m+n)/2
每次比较两个数组中第k/2大的数,假设nums1[k/2] < nums2[k/2],则nums1的前k/2元素都不可能是第k大的数,因为至少有剩余的k个数以及nums2[k/2]共k+1个数比这k/2个数大,所以接下来只需要在nums1的剩余数和nums2全部数中找第k-k/2大的数即可。
1 | class Solution { |
O(n) 用hashmap维护下标
l表示上一个发生重复的位置
1 | class Solution: |
1 | class Solution { |
1 | class Solution { |
O(n) two pointers
1 | class Solution { |
O(max(m, n)) time
1 | # Definition for singly-linked list. |
1 | # Definition for singly-linked list. |
1 | /** |
1 | /** |
hashmap O(n) time O(n) space
1 | class Solution: |
1 | class Solution: |
1 | class Solution { |
1 | class Solution { |
In fish shell, type the following commands:
1 | class Widget { |