随笔分类 - AL_Binary Search
摘要:Search a 2D Matrix II 题意:从给定的二维数组中判断是否存在给定的数值。 二分搜索 思路:我一开始想到的就是之前在1中的方法,分别用两个变量来维护,然后缩小行和列的区间,但是发现没有确切的判断能够做到缩小它们的区间,所以放弃。为了不弄得那么复杂,可以从角落开始比较,比如左下角,这
阅读全文
摘要:Kth Smallest Element in a BST 题意:求在BST中第k个最小的元素 DFS 思路:直接得出有序数组,然后根据下标求值,这应该是最直接能够想到的思路。 class Solution(object): def kthSmallest(self, root, k): """ :
阅读全文
摘要:Find the Duplicate Number 寻找数组重复值 题意:给定一个包含n+1个整数的数组,其中每个整数在1到n之间,只存在一个重复值,寻找数组中的重复值,保证空间复杂度为O(1),而且时间复杂度不能为O(n^2)。 二分搜索 思路:n个槽需要放置n+1个数字,那么必然会出现一个槽存在
阅读全文
摘要:378. Kth Smallest Element in a Sorted Matrix 二分搜索 思路:每次扫描的统计小于中间值的个数,如果个数小于k,则说明不够,还要向右;如果个数大于k,则说明已经够了,那么则向左移动。 class Solution(object): def kthSmalle
阅读全文
摘要:300. 最长上升子序列 题意 给定一个无序的整数数组,找到其中最长上升子序列的长度。 解题思路 动态规划:看到这种题目首先想到的就是dp,受到之前最长回文子串的影响,也以为是要用二维数组来解,然后用(i,j)记录区间的最长值,后来发现完全没有必要。假设dp[i]表示0到i中的最长序列长度,如果之前
阅读全文
摘要:350. Intersection of Two Arrays II 题目:和前面不一样的是,它允许出现多个次数。 Counter 利用两个Counter来进行统计,需要注意的是,需要取两个Counter中个数的较小值,时间复杂度为O(min(m, n)) import collections cl
阅读全文
摘要:209. Minimum Size Subarray Sum 题意:找到和为给定值的最小连续区间 O(n) 暴力 TLE class Solution(object): def minSubArrayLen(self, s, nums): """ :type s: int :type nums: L
阅读全文
摘要:392. Is Subsequence 这道题目可以使用很多种解法,包括是动态规划等等。 动态规划 s为匹配字符串,t为给定字符串假设dp[i][j]表示t从开始到第i个字符时对应s从开头到第j个字符,s所否是t的子序列。 分析:在比较的过程中,如果t[i]不等于s[j],则忽略掉当前的字符,取之前
阅读全文
摘要:4. 寻找两个有序数组的中位数 题意 给定两个拍好序的数组,求两个数组合并后的中位数。 解题思路 归并排序:将多个需要排序的数组合并成最终的数组,然后求中位数,那么它的时间复杂度则为(n+m)log(n+m)*,而题目的要求是log(n+m),可以看出应该是使用二分法来查找,较小的一方会直接丢弃掉;
阅读全文
摘要:74. Search a 2D Matrix 题意:从二维数组中找到给定的目标值。 分析:需要注意的是,如果当前数比目标数要小,不能够意味着搜索的范围要从当前数的行和列数目开始,因为目标值有可能会在下一个行的左边列,题目中并没有要求当前行的最后一个数要比下一行的第一个数要小,所以你只能确定目标数在当
阅读全文
摘要:34. Search for a Range 因为题目直接就要求时间复杂度为logn,所以很明显是二分查找,注意这个二分查找需要左右两边,不然长度为1的数组无法进入。 我一开始的做法,是通过二分法找到相应的值,在遍历找到最左边和最右边的相同值,但这个有个问题,就是遍历可能会造成O(n)的时间复杂度(
阅读全文