题目大意
https://leetcode.com/problems/minimum-window-substring/
给你一个字符串S和字符串T,在S中找到最小的窗口包含所有T中的字符,并输出这个窗口
题目分析
利用HashMap维护一个窗口,具体细节可以看下代码注释。
代码
|
|
https://leetcode.com/problems/minimum-window-substring/
给你一个字符串S和字符串T,在S中找到最小的窗口包含所有T中的字符,并输出这个窗口
利用HashMap维护一个窗口,具体细节可以看下代码注释。
|
|
https://leetcode.com/problems/substring-with-concatenation-of-all-words/
给你一个字符串s和字符串数组words,输出字符串数组words中的字符串的任意组合形成的字符串在s中的index的list。
最开始用暴力方法做,发现超时,最后参考了这篇文章的做法,利用了滑动窗口的做法进行优化,是用HashMap维护了一个words[0].length的窗口。
https://leetcode.com/problems/median-of-two-sorted-arrays/
求两个有序数组的中位数,时间复杂度要求是log(m+n)
单个数组中位数的问题的讨论见我之前一篇博客
思路参考了这里:https://discuss.leetcode.com/topic/28602/concise-java-solution-based-on-binary-search 先把问题转化成两个有序数组的第k小的元素。nums1的长度是l1,nums2的长度是l2,如果要找第k小的元素,可以先这样考虑,分别取nums1和nums2的第k / 2个元素,不妨设为a和b,显而易见,两个数组中的第k小的元素不可能同时小于a和b,而且如果a < b
的话,那么a以及nums1中a之前的元素都可以舍弃掉了,这样问题由k降了一半,最后复杂度是o(log(m + n))
,当然边界和特殊情况是要做处理的。