binary search
我要上岸!!!
这个作者很懒,什么都没留下…
展开
-
LeetCode 349 Intersection of Two Arrays
思路 首先遍历一遍nums1数组,利用一个hashset将其存起来,假设这个set的名字是hash。然后再遍历一遍nums2数组,将hash中存在的元素加入一个新的set叫result。最后将这个result逐个元素都存到结果数组ans中。 复杂度 时间复杂度O(n) 空间复杂度O(n) 代码 class Solution { public boolean search(int[] num...原创 2019-03-15 08:23:59 · 90 阅读 · 0 评论 -
LeetCode 33 Search in Rotated Sorted Array
思路 以mid为分界线,左右两边必有一侧为递增的。 根据begin,mid,end的大小规律,每次搜寻的时候避开乱序部分。 附上YouTube讲解https://www.youtube.com/watch?v=KSZfO65J6hg 复杂度 时间复杂度O(log n),空间复杂度O(1) 代码 参考九章的二分模板 class Solution { public int search(int...原创 2019-03-15 08:28:32 · 48 阅读 · 0 评论 -
LeetCode 153 Find Minimum in Rotated Sorted Array
思路 本质就是二分搜索的思路,只是目标变了一下。这里只需要将目标变成找第一个比前一个元素小的元素即可。套用的也是九章的二分搜索模版。 【有一个特殊情况是数组没有发生旋转:这个时候其实也不需要特殊处理,只要将判断条件设置为mid > end即可,而不是mid > start】 复杂度 时间复杂度O(logn), 空间复杂度O(1) 代码 class Solution { publ...原创 2019-03-15 09:47:42 · 57 阅读 · 0 评论 -
LeetCode 540 Single Element in a Sorted Array
思路 由于时间复杂度上有要求,所以比较容易想到二分查找。但是此题的二分前进方向不是很明显。如下面的例子: 1 2 2 3 3 1 1 2 2 3 可以看出,落单者在mid后面是奇数位=偶数位,落单着在mid前面是偶数位=奇数位。由此可以得出二分的走向。 复杂度 时间复杂度O(logn), 空间复杂度O(1) 代码 class Solution { public int singleNonD...原创 2019-03-15 11:27:17 · 119 阅读 · 0 评论 -
LeetCode 658 Find K Closest Elements
思路 二分查找。首先二分查找到最后一个<=target的位置,并将left设置为该位置,right为该位置+1,然后根据left和right与target的差值得到left和right指针移动的条件(left和right指针都指向下一个位置,可以从k的初始化看出来)。最后将[left+1, right-1]内的元素依次存入arraylist即可。 时间复杂度O(logn+k) 空间复杂度O(...原创 2019-08-15 16:33:44 · 166 阅读 · 0 评论 -
LeetCode 153 Find Minimum in Rotated Sorted Array
思路 二分法。寻找第一个<=last number的点(不能找第一个</<=first number,可以举例子得到,<: 12345 = o x x x x;<=:45123 = x o x x x)。比如: 4 5 1 2 3 || 1 2 3 4 5 o o x x x || x x x x x 复杂度 时间复杂度O(logn) 空间复杂度O(logn) 代码...原创 2019-08-17 18:30:12 · 79 阅读 · 0 评论 -
LintCode 585 Maximum Number in Mountain Sequence
思路 二分法。同样是先建立ooxx的模型并且画一个图,用具体的例子进行尝试从而得到二分的条件。这里是判断mid和mid+1的大小关系来判断在那一段数据上(上升段/下降段)。 复杂度 时间复杂度O(logn) 空间复杂度O(1) 代码 public class Solution { /** * @param nums: a mountain sequence which incre...原创 2019-08-18 08:52:15 · 117 阅读 · 0 评论 -
LC 162 Find Peak Element (LintCode 75 条件稍有不同)
思路 主要讨论上坡、下坡和波峰。 上坡:与后一个元素比较;下坡:与前一个元素比较;波峰:与左右都比较,可以直接作为最后一个情况,放到else里处理。注意前后比较的时候越界问题 LintCode75 与这题几乎一样,只是条件有很小的差别。由于条件规定了前两个元素和后两个元素的大小关系,所以peak一定是在1~length-1之间的,于是就可以省去了index的合法性检查。时间复杂度和空间复杂度不变 ...原创 2019-08-18 15:36:04 · 108 阅读 · 0 评论