• 同位字符串连接的最小长度

    同位字符串连接的最小长度(medium)做题过程一开始想到了栈,但是如果内部有重复就不行。 算法概述原题 本题要求为查找最短的同位字符串(即整个字符串均由该字符串组成)。 时间复杂度为$O(n \times T) 空间复杂度为:字符集 JAVA1234567891011121314151617181920212223242526272829303132333435class Soluti...
  • 找到稳定山的下标

    找到稳定山的下标(easy) 做题过程 非常简单。 算法概述 原题 本体要求为如果数组元素的左侧元素大于规定值,则将该元素列为稳定。采用模拟即可。 时间复杂度为O(n) 空间复杂度为O(1) JAVA 123456789class Solution { public List<Integer> stableMountains(int[] height,...
  • 哈希表 --面试经典150题

    赎金信(easy)做题过程哈希表已经easy至极了。 算法概述原题 本题要求为第二参数字符串是否包含第一个字符串中所有出现的字符。用 哈希表 存了频次然后删就行。 时间复杂度为O(m+n) 空间复杂度为O(m):只需要存储可用字符串的字符出现频次 JAVA123456789101112131415class Solution { public boolean canCon...
  • 矩阵 --面试经典150题

    有效的数独(medium)做题过程肯定就是数学的分类讨论和规律推导,和算法关系不大。 算法概述原题 本题要求为判断数独是否有效(后效条件为矩阵内1-9只能出现一次、每行每列内1-9只能出现一次) 时间复杂度为O(1):给定了81 空间复杂度为O(1) JAVA123456789101112131415161718192021222324class Solution { public...
  • 形成目标字符串需要的最少字符串数 I

    形成目标字符串需要的最少字符串数 I(medium)做题过程想到了KMP,也想到了DP,但是因为都不是非常熟悉,所以没有实现出来。 算法概述原题 本题要求为给出目标字符串,要求从给出的字符串数组中取各字符串的前缀拼接成目标字符串,返回需要最少的字符串(前缀)数量。 KMP+动态规划 。 时间复杂度为:k为单词数量,构造KMP 空间复杂度为:最大为KMP JAVA1234567891011...
  • 滑动窗口 --面试经典150题

    长度最小的子数组(medium)做题过程用两个判断分别管理左右边界,实际上是错误的结构,需要更多的判断防止越界。 算法概述原题 本题要求为计算和大于等于目标值的最短的子数组的长度。 时间复杂度为O(n) 空间复杂度为O(1) JAVA123456789101112131415161718192021222324252627282930class Solution { public ...
  • 最近的房间

    最近的房间(hard)做题过程只想到用模拟做,还没写完。 算法概述原题 本题要求为给出两个个数组,第一个数组内部的数组元素包含每个房间的房间号和大小等信息,第二个数组内的数组元素包含要求的房间号和至少的房间大小,计算对于第二个数组中的每个要求,返回最符合条件的房间号(房间号大小偏差最小以及大小要大于等于要求的大小)。使用 离线算法 统一读取查询数组(第二个数组),同时处理两个数组的操作。 ...
  • 双指针 --面试经典150题

    验证回文串(easy)做题过程就是非常简单的双指针应用。 算法概述原题 本题要求为判断一个字符串是否为回文(需跳过特殊字符进行匹配)。 双指针 。 时间复杂度为O(n) 空间复杂度为O(1) JAVA123456789101112131415161718192021class Solution { public boolean isPalindrome(String s) { ...
  • 数组大小减半

    数组大小减半(medium)做题过程我用了哈希表和排序完成,实际上也就是贪心。 算法概述原题 本题要求为给出一个带有多个重复元素的数组,返回使原数组长度至少减半的最少删除的重复元素的数量。使用 哈希表+排序 。 时间复杂度为O(nlongn) 空间复杂度为O(n) JAVA1234567891011121314151617181920212223class Solution {...
  • K次乘运算后的最终数组 II

    K次乘运算后的最终数组 II(hard)做题过程本来以为可以直接用昨天的解法加一个取模就结束了,但实际上还需要对操作做更精细的算法优化,不懂。 算法概述原题 本题要求与I无异,主要问题在于输入将会很大。 最小堆+快速幂 。 时间复杂度为:指的是最大值,右括号内的第一个参数是出堆入堆,二个参数是快速幂 空间复杂度为O(n) JAVA12345678910111213141516171819...
1234568