同位字符串连接的最小长度(medium)
做题过程
一开始想到了栈,但是如果内部有重复就不行。
算法概述
原题
本题要求为查找最短的同位字符串(即整个字符串均由该字符串组成)。
时间复杂度为$O(n \times T)
空间复杂度为O(∑)O(\sum)O(∑):字符集
JAVA
12345678910111213141516171819202122232425262728293...
找到稳定山的下标(easy)
做题过程
非常简单。
算法概述
原题
本体要求为如果数组元素的左侧元素大于规定值,则将该元素列为稳定。采用模拟即可。
时间复杂度为O(n)
空间复杂度为O(1)
JAVA
123456789class Solution { public List<Integer> stableMountains(int[] height,...
赎金信(easy)
做题过程
哈希表已经easy至极了。
算法概述
原题
本题要求为第二参数字符串是否包含第一个字符串中所有出现的字符。用 哈希表 存了频次然后删就行。
时间复杂度为O(m+n)
空间复杂度为O(m):只需要存储可用字符串的字符出现频次
JAVA
123456789101112131415class Solution { public boolea...
有效的数独(medium)
做题过程
肯定就是数学的分类讨论和规律推导,和算法关系不大。
算法概述
原题
本题要求为判断9×99 \times 99×9数独是否有效(后效条件为3×33 \times 33×3矩阵内1-9只能出现一次、每行每列内1-9只能出现一次)
时间复杂度为O(1):给定了81
空间复杂度为O(1)
JAVA
1234567891011121314151617...
形成目标字符串需要的最少字符串数 I(medium)
做题过程
想到了KMP,也想到了DP,但是因为都不是非常熟悉,所以没有实现出来。
算法概述
原题
本题要求为给出目标字符串,要求从给出的字符串数组中取各字符串的前缀拼接成目标字符串,返回需要最少的字符串(前缀)数量。 KMP+动态规划 。
时间复杂度为O(k/times(m+n))O(k /times (m+n))O(k/time...
长度最小的子数组(medium)
做题过程
用两个判断分别管理左右边界,实际上是错误的结构,需要更多的判断防止越界。
算法概述
原题
本题要求为计算和大于等于目标值的最短的子数组的长度。
时间复杂度为O(n)
空间复杂度为O(1)
JAVA
123456789101112131415161718192021222324252627282930class Solution { ...
最近的房间(hard)
做题过程
只想到用模拟做,还没写完。
算法概述
原题
本题要求为给出两个个数组,第一个数组内部的数组元素包含每个房间的房间号和大小等信息,第二个数组内的数组元素包含要求的房间号和至少的房间大小,计算对于第二个数组中的每个要求,返回最符合条件的房间号(房间号大小偏差最小以及大小要大于等于要求的大小)。使用 离线算法 统一读取查询数组(第二个数组),同时处理两个数组...
验证回文串(easy)
做题过程
就是非常简单的双指针应用。
算法概述
原题
本题要求为判断一个字符串是否为回文(需跳过特殊字符进行匹配)。 双指针 。
时间复杂度为O(n)
空间复杂度为O(1)
JAVA
123456789101112131415161718192021class Solution { public boolean isPalindrome(String...
数组大小减半(medium)
做题过程
我用了哈希表和排序完成,实际上也就是贪心。
算法概述
原题
本题要求为给出一个带有多个重复元素的数组,返回使原数组长度至少减半的最少删除的重复元素的数量。使用 哈希表+排序 。
时间复杂度为O(nlongn)
空间复杂度为O(n)
JAVA
1234567891011121314151617181920212223class Solutio...
K次乘运算后的最终数组 II(hard)
做题过程
本来以为可以直接用昨天的解法加一个取模就结束了,但实际上还需要对操作做更精细的算法优化,不懂。
算法概述
原题
本题要求与I无异,主要问题在于输入将会很大。 最小堆+快速幂 。
时间复杂度为O(n×(lognlogmx+log(nk)))O\left(n \times \left(\log n \log m_x + \log ...